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,1391 @@
1
+ /************************************************************************
2
+ FAUST Architecture File
3
+ Copyright (C) 2010-2012 GRAME, Centre National de Creation Musicale
4
+ ---------------------------------------------------------------------
5
+ This Architecture section is free software; you can redistribute it
6
+ and/or modify it under the terms of the GNU General Public License
7
+ as published by the Free Software Foundation; either version 3 of
8
+ the License, or (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with this program; If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ EXCEPTION : As a special exception, you may create a larger work
19
+ that contains this FAUST architecture section and distribute
20
+ that work under terms of your choice, so long as this FAUST
21
+ architecture section is not modified.
22
+
23
+ ************************************************************************
24
+ ************************************************************************/
25
+
26
+ #include <stdlib.h>
27
+ #include <assert.h>
28
+ #include <pthread.h>
29
+ #include <stdio.h>
30
+ #include <errno.h>
31
+ #include <string.h>
32
+ #include <semaphore.h>
33
+ #include <sys/stat.h>
34
+ #include <errno.h>
35
+ #include <fcntl.h>
36
+ #include <unistd.h>
37
+ #include <math.h>
38
+
39
+ // For AVOIDDENORMALS
40
+ #include "faust/dsp/dsp.h"
41
+
42
+ #ifdef __cplusplus
43
+ extern "C" {
44
+ #endif
45
+
46
+ // Globals
47
+
48
+ static int GetPID()
49
+ {
50
+ #ifdef WIN32
51
+ return _getpid();
52
+ #else
53
+ return getpid();
54
+ #endif
55
+ }
56
+
57
+ #define WORK_STEALING_INDEX 0
58
+ #define LAST_TASK_INDEX 1
59
+
60
+ #define MASTER_THREAD 0
61
+ #define MAX_STEAL_DUR 50 // in usec
62
+ #define DEFAULT_CLOCKS_PER_SEC 2500000000 // in cycles (2,5 Ghz)
63
+ #define JACK_SCHED_POLICY SCHED_FIFO
64
+ #define KDSPMESURE 50
65
+
66
+ #define MEAN_TRESHOLD 0.1f // in percentage
67
+
68
+ #ifdef __ICC
69
+ #define INLINE __forceinline
70
+ #else
71
+ #define INLINE inline
72
+ #endif
73
+
74
+ #ifdef __linux__
75
+
76
+ // handle 32/64 bits int size issues
77
+ #ifdef __x86_64__
78
+ #define UInt32 unsigned int
79
+ #define UInt64 unsigned long int
80
+ #else
81
+ #define UInt32 unsigned int
82
+ #define UInt64 unsigned long long int
83
+ #endif
84
+
85
+ #endif
86
+
87
+ #ifdef __APPLE__
88
+ #include <mach/mach.h>
89
+ #elif defined(_WIN32)
90
+ #include <windows.h>
91
+ #else
92
+ #include <semaphore.h>
93
+ #include <errno.h>
94
+ #endif
95
+
96
+ /*
97
+ Copyright (C) 2012 Paul Davis
98
+ Author: David Robillard
99
+
100
+ This program is free software; you can redistribute it and/or modify
101
+ it under the terms of the GNU General Public License as published by
102
+ the Free Software Foundation; either version 2 of the License, or
103
+ (at your option) any later version.
104
+
105
+ This program is distributed in the hope that it will be useful,
106
+ static int GetPID()
107
+ {
108
+ #ifdef WIN32
109
+ return _getpid();
110
+ #else
111
+ return getpid();
112
+ #endif
113
+ }
114
+
115
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
116
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
117
+ GNU General Public License for more details.
118
+
119
+ You should have received a copy of the GNU General Public License
120
+ along with this program; if not, write to the Free Software
121
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
122
+ */
123
+
124
+ /**
125
+ Unnamed (process local) counting semaphore.
126
+
127
+ The civilized person's synchronisation primitive. A counting semaphore is
128
+ an integer which is always non-negative, so, an attempted decrement (or
129
+ "wait") will block if the value is 0, until another thread does an increment
130
+ (or "post").
131
+
132
+ At least on Lignux, the main advantage of this is that it is fast and the
133
+ only safe way to reliably signal from a real-time audio thread. The
134
+ counting semantics also complement ringbuffers of events nicely.
135
+ */
136
+
137
+ class Semaphore
138
+ {
139
+ public:
140
+ /**
141
+ Create a new semaphore.
142
+ Chances are you want 1 wait() per 1 post(), an initial value of 0.
143
+ */
144
+ inline Semaphore(unsigned initial);
145
+
146
+ inline ~Semaphore();
147
+
148
+ /** Post/Increment/Signal */
149
+ inline void post();
150
+
151
+ /** Wait/Decrement. Returns false on error. */
152
+ inline bool wait();
153
+
154
+ /** Attempt Wait/Decrement. Returns true iff a decrement occurred. */
155
+ inline bool try_wait();
156
+
157
+ private:
158
+ #if defined(__APPLE__)
159
+ semaphore_t _sem; // sem_t is a worthless broken mess on OSX
160
+ #elif defined(_WIN32)
161
+ HANDLE _sem; // types are overrated anyway
162
+ #else
163
+ char fName[128];
164
+ sem_t* _sem;
165
+ #endif
166
+ };
167
+
168
+ #ifdef __APPLE__
169
+
170
+ inline Semaphore::Semaphore(unsigned initial)
171
+ {
172
+ if (semaphore_create(mach_task_self(), &_sem, SYNC_POLICY_FIFO, initial)) {
173
+ throw -1;
174
+ }
175
+ }
176
+
177
+ inline Semaphore::~Semaphore()
178
+ {
179
+ semaphore_destroy(mach_task_self(), _sem);
180
+ }
181
+
182
+ inline void Semaphore::post()
183
+ {
184
+ semaphore_signal(_sem);
185
+ }
186
+
187
+ inline bool Semaphore::wait()
188
+ {
189
+ if (semaphore_wait(_sem) != KERN_SUCCESS) {
190
+ return false;
191
+ }
192
+ return true;
193
+ }
194
+
195
+ inline bool Semaphore::try_wait()
196
+ {
197
+ const mach_timespec_t zero = { 0, 0 };
198
+ return semaphore_timedwait(_sem, zero) == KERN_SUCCESS;
199
+ }
200
+
201
+ #elif defined(_WIN32)
202
+
203
+ inline Semaphore::Semaphore(unsigned initial)
204
+ {
205
+ if (!(_sem = CreateSemaphore(NULL, initial, LONG_MAX, NULL))) {
206
+ throw -1;
207
+ }
208
+ }
209
+
210
+ inline Semaphore::~Semaphore()
211
+ {
212
+ CloseHandle(_sem);
213
+ }
214
+
215
+ inline void Semaphore::post()
216
+ {
217
+ ReleaseSemaphore(_sem, 1, NULL);
218
+ }
219
+
220
+ inline bool Semaphore::wait()
221
+ {
222
+ if (WaitForSingleObject(_sem, INFINITE) != WAIT_OBJECT_0) {
223
+ return false;
224
+ }
225
+ return true;
226
+ }
227
+
228
+ inline bool Semaphore::try_wait()
229
+ {
230
+ return WaitForSingleObject(_sem, 0) == WAIT_OBJECT_0;
231
+ }
232
+
233
+ #else /* !defined(__APPLE__) && !defined(_WIN32) */
234
+
235
+ Semaphore::Semaphore(unsigned initial)
236
+ {
237
+ sprintf(fName, "faust_sem_%d_%p", GetPID(), this);
238
+ if ((_sem = sem_open(fName, O_CREAT, 0777, 0)) == (sem_t*)SEM_FAILED) {
239
+ printf("Allocate: can't check in named semaphore name = %s err = %s", fName, strerror(errno));
240
+ throw -1;
241
+ }
242
+ }
243
+
244
+ inline Semaphore::~Semaphore()
245
+ {
246
+ sem_unlink(fName);
247
+ sem_close(_sem);
248
+ }
249
+
250
+ inline void Semaphore::post()
251
+ {
252
+ sem_post(_sem);
253
+ }
254
+
255
+ inline bool Semaphore::wait()
256
+ {
257
+ while (sem_wait(_sem)) {
258
+ if (errno != EINTR) {
259
+ return false; // We are all doomed
260
+ }
261
+ // Otherwise, interrupted (rare/weird), so try again.
262
+ }
263
+
264
+ return true;
265
+ }
266
+
267
+ inline bool Semaphore::try_wait()
268
+ {
269
+ return (sem_trywait(_sem) == 0);
270
+ }
271
+
272
+ #endif
273
+
274
+ #ifdef __APPLE__
275
+ //#include <CoreServices/../Frameworks/CarbonCore.framework/Headers/MacTypes.h>
276
+ #include <MacTypes.h>
277
+ #include <libkern/OSAtomic.h>
278
+ #endif
279
+
280
+ static void Yield();
281
+
282
+ /**
283
+ * Returns the number of clock cycles elapsed since the last reset
284
+ * of the processor
285
+ */
286
+ static INLINE UInt64 DSP_rdtsc(void)
287
+ {
288
+ union {
289
+ UInt32 i32[2];
290
+ UInt64 i64;
291
+ } count;
292
+
293
+ __asm__ __volatile__("rdtsc" : "=a" (count.i32[0]), "=d" (count.i32[1]));
294
+ return count.i64;
295
+ }
296
+
297
+ #if defined(__i386__) || defined(__x86_64__)
298
+
299
+ #define LOCK "lock ; "
300
+
301
+ static INLINE void NOP(void)
302
+ {
303
+ /*
304
+ #ifndef __APPLE__
305
+ __asm__ __volatile__("nop \n\t");
306
+ #endif
307
+ */
308
+ }
309
+
310
+ static INLINE char CAS1(volatile void* addr, volatile int value, int newvalue)
311
+ {
312
+ return __sync_bool_compare_and_swap((int*)addr, value, newvalue);
313
+ }
314
+
315
+ static INLINE int atomic_xadd(volatile int* atomic, int val)
316
+ {
317
+ return __sync_add_and_fetch(atomic, val);
318
+ }
319
+
320
+ #endif
321
+
322
+ /*
323
+ static INLINE int INC_ATOMIC(volatile int* val)
324
+ {
325
+ int actual;
326
+ do {
327
+ actual = *val;
328
+ } while (!CAS1(val, actual, actual + 1));
329
+ return actual;
330
+ }
331
+
332
+ static INLINE int DEC_ATOMIC(volatile int* val)
333
+ {
334
+ int actual;
335
+ do {
336
+ actual = *val;
337
+ } while (!CAS1(val, actual, actual - 1));
338
+ return actual;
339
+ }
340
+ */
341
+
342
+ static INLINE int INC_ATOMIC(volatile int* val)
343
+ {
344
+ return atomic_xadd(val, 1);
345
+ }
346
+
347
+ static INLINE int DEC_ATOMIC(volatile int* val)
348
+ {
349
+ return atomic_xadd(val, -1);
350
+ }
351
+
352
+ // To be used in lock-free queue
353
+ struct AtomicCounter
354
+ {
355
+ union {
356
+ struct {
357
+ short fHead;
358
+ short fTail;
359
+ } scounter;
360
+ int fValue;
361
+ } info;
362
+
363
+ INLINE AtomicCounter()
364
+ {
365
+ info.fValue = 0;
366
+ }
367
+
368
+ INLINE AtomicCounter& operator=(AtomicCounter& obj)
369
+ {
370
+ info.fValue = obj.info.fValue;
371
+ return *this;
372
+ }
373
+
374
+ INLINE AtomicCounter& operator=(volatile AtomicCounter& obj)
375
+ {
376
+ info.fValue = obj.info.fValue;
377
+ return *this;
378
+ }
379
+
380
+ };
381
+
382
+ /* use 512KB stack per thread - the default is way too high to be feasible
383
+ * with mlockall() on many systems */
384
+ #define THREAD_STACK 524288
385
+
386
+ #ifdef __APPLE__
387
+
388
+ #include <mach/thread_policy.h>
389
+ #include <mach/thread_act.h>
390
+ #include <mach/mach_time.h>
391
+
392
+ #include <sys/types.h>
393
+ #include <sys/sysctl.h>
394
+
395
+ #define THREAD_SET_PRIORITY 0
396
+ #define THREAD_SCHEDULED_PRIORITY 1
397
+
398
+ static void get_affinity(pthread_t thread)
399
+ {
400
+ thread_affinity_policy theTCPolicy;
401
+ mach_msg_type_number_t count = THREAD_AFFINITY_POLICY_COUNT;
402
+ boolean_t get_default = false;
403
+ kern_return_t res = thread_policy_get(pthread_mach_thread_np(thread), THREAD_AFFINITY_POLICY, (thread_policy_t)&theTCPolicy, &count, &get_default);
404
+ if (res == KERN_SUCCESS) {
405
+ //printf("get_affinity = %d\n", theTCPolicy.affinity_tag);
406
+ }
407
+ }
408
+
409
+ static void set_affinity(pthread_t thread, int tag)
410
+ {
411
+ thread_affinity_policy theTCPolicy;
412
+ theTCPolicy.affinity_tag = tag;
413
+ kern_return_t res = thread_policy_set(pthread_mach_thread_np(thread), THREAD_AFFINITY_POLICY, (thread_policy_t)&theTCPolicy, THREAD_AFFINITY_POLICY_COUNT);
414
+ if (res == KERN_SUCCESS) {
415
+ //printf("set_affinity = %d\n", theTCPolicy.affinity_tag);
416
+ }
417
+ }
418
+
419
+ static UInt32 GetThreadPriority(pthread_t thread, int inWhichPriority);
420
+
421
+ // returns the thread's priority as it was last set by the API
422
+ static UInt32 GetThreadSetPriority(pthread_t thread)
423
+ {
424
+ return GetThreadPriority(thread, THREAD_SET_PRIORITY);
425
+ }
426
+
427
+ // returns the thread's priority as it was last scheduled by the Kernel
428
+ static UInt32 GetThreadScheduledPriority(pthread_t thread)
429
+ {
430
+ return GetThreadPriority(thread, THREAD_SCHEDULED_PRIORITY);
431
+ }
432
+
433
+ static int SetThreadToPriority(pthread_t thread, UInt32 inPriority, Boolean inIsFixed, UInt64 period, UInt64 computation, UInt64 constraint)
434
+ {
435
+ if (inPriority == 96) {
436
+ // REAL-TIME / TIME-CONSTRAINT THREAD
437
+ thread_time_constraint_policy_data_t theTCPolicy;
438
+ theTCPolicy.period = period;
439
+ theTCPolicy.computation = computation;
440
+ theTCPolicy.constraint = constraint;
441
+ theTCPolicy.preemptible = true;
442
+ kern_return_t res = thread_policy_set(pthread_mach_thread_np(thread), THREAD_TIME_CONSTRAINT_POLICY, (thread_policy_t)&theTCPolicy, THREAD_TIME_CONSTRAINT_POLICY_COUNT);
443
+ return (res == KERN_SUCCESS) ? 0 : -1;
444
+ } else {
445
+ // OTHER THREADS
446
+ thread_extended_policy_data_t theFixedPolicy;
447
+ thread_precedence_policy_data_t thePrecedencePolicy;
448
+ SInt32 relativePriority;
449
+
450
+ // [1] SET FIXED / NOT FIXED
451
+ theFixedPolicy.timeshare = !inIsFixed;
452
+ thread_policy_set(pthread_mach_thread_np(thread), THREAD_EXTENDED_POLICY, (thread_policy_t)&theFixedPolicy, THREAD_EXTENDED_POLICY_COUNT);
453
+
454
+ // [2] SET PRECEDENCE
455
+ // N.B.: We expect that if thread A created thread B, and the program wishes to change
456
+ // the priority of thread B, then the call to change the priority of thread B must be
457
+ // made by thread A.
458
+ // This assumption allows us to use pthread_self() to correctly calculate the priority
459
+ // of the feeder thread (since precedency policy's importance is relative to the
460
+ // spawning thread's priority.)
461
+ relativePriority = inPriority - GetThreadSetPriority(pthread_self());
462
+
463
+ thePrecedencePolicy.importance = relativePriority;
464
+ kern_return_t res = thread_policy_set(pthread_mach_thread_np(thread), THREAD_PRECEDENCE_POLICY, (thread_policy_t)&thePrecedencePolicy, THREAD_PRECEDENCE_POLICY_COUNT);
465
+ return (res == KERN_SUCCESS) ? 0 : -1;
466
+ }
467
+ }
468
+
469
+ static UInt32 GetThreadPriority(pthread_t thread, int inWhichPriority)
470
+ {
471
+ thread_basic_info_data_t threadInfo;
472
+ policy_info_data_t thePolicyInfo;
473
+ unsigned int count;
474
+
475
+ // get basic info
476
+ count = THREAD_BASIC_INFO_COUNT;
477
+ thread_info(pthread_mach_thread_np(thread), THREAD_BASIC_INFO, (thread_info_t)&threadInfo, &count);
478
+
479
+ switch (threadInfo.policy) {
480
+ case POLICY_TIMESHARE:
481
+ count = POLICY_TIMESHARE_INFO_COUNT;
482
+ thread_info(pthread_mach_thread_np(thread), THREAD_SCHED_TIMESHARE_INFO, (thread_info_t)&(thePolicyInfo.ts), &count);
483
+ if (inWhichPriority == THREAD_SCHEDULED_PRIORITY) {
484
+ return thePolicyInfo.ts.cur_priority;
485
+ } else {
486
+ return thePolicyInfo.ts.base_priority;
487
+ }
488
+ break;
489
+
490
+ case POLICY_FIFO:
491
+ count = POLICY_FIFO_INFO_COUNT;
492
+ thread_info(pthread_mach_thread_np(thread), THREAD_SCHED_FIFO_INFO, (thread_info_t)&(thePolicyInfo.fifo), &count);
493
+ if ((thePolicyInfo.fifo.depressed) && (inWhichPriority == THREAD_SCHEDULED_PRIORITY)) {
494
+ return thePolicyInfo.fifo.depress_priority;
495
+ }
496
+ return thePolicyInfo.fifo.base_priority;
497
+ break;
498
+
499
+ case POLICY_RR:
500
+ count = POLICY_RR_INFO_COUNT;
501
+ thread_info(pthread_mach_thread_np(thread), THREAD_SCHED_RR_INFO, (thread_info_t)&(thePolicyInfo.rr), &count);
502
+ if ((thePolicyInfo.rr.depressed) && (inWhichPriority == THREAD_SCHEDULED_PRIORITY)) {
503
+ return thePolicyInfo.rr.depress_priority;
504
+ }
505
+ return thePolicyInfo.rr.base_priority;
506
+ break;
507
+ }
508
+
509
+ return 0;
510
+ }
511
+
512
+ static int GetParams(pthread_t thread, UInt64* period, UInt64* computation, UInt64* constraint)
513
+ {
514
+ thread_time_constraint_policy_data_t theTCPolicy;
515
+ mach_msg_type_number_t count = THREAD_TIME_CONSTRAINT_POLICY_COUNT;
516
+ boolean_t get_default = false;
517
+
518
+ kern_return_t res = thread_policy_get(pthread_mach_thread_np(thread),
519
+ THREAD_TIME_CONSTRAINT_POLICY,
520
+ (thread_policy_t)&theTCPolicy,
521
+ &count,
522
+ &get_default);
523
+ if (res == KERN_SUCCESS) {
524
+ *period = theTCPolicy.period;
525
+ *computation = theTCPolicy.computation;
526
+ *constraint = theTCPolicy.constraint;
527
+ return 0;
528
+ } else {
529
+ return -1;
530
+ }
531
+ }
532
+
533
+
534
+ static double gTimeRatio = 0;
535
+ static UInt64 gPeriod = 0;
536
+ static UInt64 gComputation = 0;
537
+ static UInt64 gConstraint = 0;
538
+
539
+ /* This should only be called ONCE per process. */
540
+ static void InitTime()
541
+ {
542
+ mach_timebase_info_data_t info;
543
+ mach_timebase_info(&info);
544
+ gTimeRatio = ((double)info.numer / (double)info.denom) / 1000;
545
+ }
546
+
547
+ UInt64 GetMicroSeconds(void)
548
+ {
549
+ return UInt64(mach_absolute_time() * gTimeRatio);
550
+ }
551
+
552
+ void GetRealTime()
553
+ {
554
+ if (gPeriod == 0) {
555
+ InitTime();
556
+ GetParams(pthread_self(), &gPeriod, &gComputation, &gConstraint);
557
+ }
558
+ }
559
+
560
+ static void SetRealTime()
561
+ {
562
+ SetThreadToPriority(pthread_self(), 96, true, gPeriod, gComputation, gConstraint);
563
+ }
564
+
565
+ static void CancelThread(pthread_t fThread)
566
+ {
567
+ mach_port_t machThread = pthread_mach_thread_np(fThread);
568
+ thread_terminate(machThread);
569
+ }
570
+
571
+ static void Yield()
572
+ {
573
+ //sched_yield();
574
+ }
575
+
576
+ int get_max_cpu()
577
+ {
578
+ int physical_count = 0;
579
+ size_t size = sizeof(physical_count);
580
+ sysctlbyname("hw.physicalcpu", &physical_count, &size, NULL, 0);
581
+ int logical_count = 0;
582
+ sysctlbyname("hw.logicalcpu", &logical_count, &size, NULL, 0);
583
+ return physical_count;
584
+ }
585
+
586
+ #endif
587
+
588
+ #ifdef __linux__
589
+
590
+ static int faust_sched_policy = -1;
591
+ static struct sched_param faust_rt_param;
592
+
593
+ void GetRealTime()
594
+ {
595
+ if (faust_sched_policy == -1) {
596
+ memset(&faust_rt_param, 0, sizeof(faust_rt_param));
597
+ pthread_getschedparam(pthread_self(), &faust_sched_policy, &faust_rt_param);
598
+ }
599
+ }
600
+
601
+ static void SetRealTime()
602
+ {
603
+ faust_rt_param.sched_priority--;
604
+ pthread_setschedparam(pthread_self(), faust_sched_policy, &faust_rt_param);
605
+ }
606
+
607
+ static void CancelThread(pthread_t fThread)
608
+ {
609
+ pthread_cancel(fThread);
610
+ pthread_join(fThread, NULL);
611
+ }
612
+
613
+ static void Yield()
614
+ {
615
+ pthread_yield();
616
+ }
617
+
618
+ // TODO
619
+ static UInt64 GetMicroSeconds(void)
620
+ {
621
+ return 0;
622
+ }
623
+
624
+ static void get_affinity(pthread_t thread) {}
625
+ static void set_affinity(pthread_t thread, int tag) {}
626
+
627
+ int get_max_cpu()
628
+ {
629
+ return sysconf(_SC_NPROCESSORS_ONLN);
630
+ }
631
+
632
+ #endif
633
+
634
+ static INLINE int Range(int min, int max, int val)
635
+ {
636
+ if (val < min) {
637
+ return min;
638
+ } else if (val > max) {
639
+ return max;
640
+ } else {
641
+ return val;
642
+ }
643
+ }
644
+
645
+ #if defined(LLVM_50) || defined(LLVM_40) || defined(LLVM_39) || defined(LLVM_38) || defined(LLVM_37) || defined(LLVM_36) || defined(LLVM_35) || defined(LLVM_34)
646
+ extern "C" void computeThreadExternal(void* dsp, int num_thread) __attribute__((weak_import));
647
+ #else
648
+ void computeThreadExternal(void* dsp, int num_thread);
649
+ #endif
650
+
651
+ class DynThreadAdapter {
652
+
653
+ private:
654
+
655
+ UInt64 fTiming[KDSPMESURE];
656
+ UInt64 fStart;
657
+ UInt64 fStop;
658
+ int fCounter;
659
+ float fOldMean;
660
+ int fOldfDynamicNumThreads;
661
+ bool fDynAdapt;
662
+
663
+ INLINE float ComputeMean()
664
+ {
665
+ float mean = 0;
666
+ for (int i = 0; i < KDSPMESURE; i++) {
667
+ mean += float(fTiming[i]);
668
+ }
669
+ mean /= float(KDSPMESURE);
670
+ return mean;
671
+ }
672
+
673
+ public :
674
+
675
+ DynThreadAdapter():fCounter(0), fOldMean(1000000000.f), fOldfDynamicNumThreads(1)
676
+ {
677
+ memset(fTiming, 0, sizeof(long long int ) * KDSPMESURE);
678
+ fDynAdapt = getenv("OMP_DYN_THREAD") ? strtol(getenv("OMP_DYN_THREAD"), NULL, 10) : false;
679
+ }
680
+
681
+ INLINE void StartMeasure()
682
+ {
683
+ if (fDynAdapt) {
684
+ //fStart = DSP_rdtsc();
685
+ fStart = GetMicroSeconds();
686
+ }
687
+ }
688
+
689
+ INLINE void StopMeasure(int staticthreadnum, int& dynthreadnum)
690
+ {
691
+ if (!fDynAdapt) {
692
+ return;
693
+ }
694
+
695
+ //fStop = DSP_rdtsc();
696
+ fStop = GetMicroSeconds();
697
+ fCounter = (fCounter + 1) % KDSPMESURE;
698
+ if (fCounter == 0) {
699
+ float mean = ComputeMean();
700
+ // Recompute dynthreadnum is timing différence is sufficient...
701
+ //printf("mean = %f fOldMean = %f\n", mean, fOldMean);
702
+ if (fabs(mean - fOldMean) / fOldMean > MEAN_TRESHOLD) {
703
+ if (mean > fOldMean) { // Worse...
704
+ if (fOldfDynamicNumThreads > dynthreadnum) {
705
+ fOldfDynamicNumThreads = dynthreadnum;
706
+ dynthreadnum += 1;
707
+ } else {
708
+ fOldfDynamicNumThreads = dynthreadnum;
709
+ dynthreadnum -= 1;
710
+ }
711
+ } else { // Better...
712
+ if (fOldfDynamicNumThreads > dynthreadnum) {
713
+ fOldfDynamicNumThreads = dynthreadnum;
714
+ dynthreadnum -= 1;
715
+ } else {
716
+ fOldfDynamicNumThreads = dynthreadnum;
717
+ dynthreadnum += 1;
718
+ }
719
+ }
720
+ fOldMean = mean;
721
+ dynthreadnum = Range(1, staticthreadnum, dynthreadnum);
722
+ //printf("dynthreadnum = %d\n", dynthreadnum);
723
+ }
724
+ }
725
+ // And keep computation time
726
+ fTiming[fCounter] = fStop - fStart;
727
+ }
728
+ };
729
+
730
+ #define Value(e) (e).info.fValue
731
+
732
+ #define Head(e) (e).info.scounter.fHead
733
+ #define IncHead(e) (e).info.scounter.fHead++
734
+ #define DecHead(e) (e).info.scounter.fHead--
735
+
736
+ #define Tail(e) (e).info.scounter.fTail
737
+ #define IncTail(e) (e).info.scounter.fTail++
738
+ #define DecTail(e) (e).info.scounter.fTail--
739
+
740
+ class TaskQueue
741
+ {
742
+ private:
743
+
744
+ int* fTaskList;
745
+ int fTaskQueueSize;
746
+ volatile AtomicCounter fCounter;
747
+
748
+ UInt64 fStealingStart;
749
+ UInt64 fMaxStealing;
750
+
751
+ public:
752
+
753
+ INLINE TaskQueue()
754
+ {}
755
+
756
+ INLINE void Init(int task_queue_size)
757
+ {
758
+ fTaskQueueSize = task_queue_size;
759
+ fTaskList = new int[fTaskQueueSize];
760
+ for (int i = 0; i < fTaskQueueSize; i++) {
761
+ fTaskList[i] = -1;
762
+ }
763
+ fStealingStart = 0;
764
+
765
+ int clock_per_microsec = (getenv("CLOCKSPERSEC")
766
+ ? strtoll(getenv("CLOCKSPERSEC"), NULL, 10)
767
+ : DEFAULT_CLOCKS_PER_SEC) / 1000000;
768
+
769
+ fMaxStealing = getenv("OMP_STEALING_DUR")
770
+ ? strtoll(getenv("OMP_STEALING_DUR"), NULL, 10) * clock_per_microsec
771
+ : MAX_STEAL_DUR * clock_per_microsec;
772
+ }
773
+
774
+ INLINE ~TaskQueue()
775
+ {
776
+ delete[] fTaskList;
777
+ }
778
+
779
+ INLINE void InitOne()
780
+ {
781
+ for (int i = 0; i < fTaskQueueSize; i++) {
782
+ fTaskList[i] = -1;
783
+ }
784
+ fCounter.info.fValue = 0;
785
+ fStealingStart = 0;
786
+ }
787
+
788
+ INLINE void PushHead(int item)
789
+ {
790
+ fTaskList[Head(fCounter)] = item;
791
+ IncHead(fCounter);
792
+ }
793
+
794
+ INLINE int PopHead()
795
+ {
796
+ AtomicCounter old_val;
797
+ AtomicCounter new_val;
798
+
799
+ do {
800
+ old_val = fCounter;
801
+ new_val = old_val;
802
+ if (Head(old_val) == Tail(old_val)) {
803
+ return WORK_STEALING_INDEX;
804
+ } else {
805
+ DecHead(new_val);
806
+ }
807
+ } while (!CAS1(&fCounter, Value(old_val), Value(new_val)));
808
+
809
+ return fTaskList[Head(old_val) - 1];
810
+ }
811
+
812
+ INLINE int PopTail()
813
+ {
814
+ AtomicCounter old_val;
815
+ AtomicCounter new_val;
816
+
817
+ do {
818
+ old_val = fCounter;
819
+ new_val = old_val;
820
+ if (Head(old_val) == Tail(old_val)) {
821
+ return WORK_STEALING_INDEX;
822
+ } else {
823
+ IncTail(new_val);
824
+ }
825
+ } while (!CAS1(&fCounter, Value(old_val), Value(new_val)));
826
+
827
+ return fTaskList[Tail(old_val)];
828
+ }
829
+
830
+ INLINE void MeasureStealingDur()
831
+ {
832
+ // Takes first timestamp
833
+ if (fStealingStart == 0) {
834
+ fStealingStart = DSP_rdtsc();
835
+ } else if ((DSP_rdtsc() - fStealingStart) > fMaxStealing) {
836
+ Yield();
837
+ }
838
+ }
839
+
840
+ INLINE void ResetStealingDur()
841
+ {
842
+ fStealingStart = 0;
843
+ }
844
+
845
+ static INLINE int GetNextTask(TaskQueue* task_queue_list, int cur_thread, int num_threads)
846
+ {
847
+ int tasknum;
848
+ for (int i = 0; i < num_threads; i++) {
849
+ if ((tasknum = task_queue_list[i].PopTail()) != WORK_STEALING_INDEX) {
850
+ #ifdef __linux__
851
+ //if (cur_thread != MASTER_THREAD)
852
+ task_queue_list[cur_thread].ResetStealingDur();
853
+ #endif
854
+ return tasknum; // Task is found
855
+ }
856
+ }
857
+ //NOP();
858
+ #ifdef __linux__
859
+ //if (cur_thread != MASTER_THREAD)
860
+ task_queue_list[cur_thread].MeasureStealingDur();
861
+ #endif
862
+ return WORK_STEALING_INDEX; // Otherwise will try "workstealing" again next cycle...
863
+ }
864
+
865
+ INLINE void InitTaskList(int task_list_size, int* task_list, int thread_num, int cur_thread)
866
+ {
867
+ int task_slice = task_list_size / thread_num;
868
+ int task_slice_rest = task_list_size % thread_num;
869
+
870
+ // cur_thread takes it's slice of tasks
871
+ for (int index = 0; index < task_slice; index++) {
872
+ PushHead(task_list[cur_thread * task_slice + index]);
873
+ }
874
+
875
+ // Thread 0 takes remaining ready tasks
876
+ if (cur_thread == 0) {
877
+ for (int index = 0; index < task_slice_rest; index++) {
878
+ PushHead(task_list[thread_num * task_slice + index]);
879
+ }
880
+ }
881
+ }
882
+
883
+ static INLINE void InitAll(TaskQueue* task_queue_list, int num_threads)
884
+ {
885
+ for (int i = 0; i < num_threads; i++) {
886
+ task_queue_list[i].InitOne();
887
+ }
888
+ }
889
+
890
+ };
891
+
892
+ class TaskGraph
893
+ {
894
+ private:
895
+
896
+ volatile int* fTaskList;
897
+ int fTaskQueueSize;
898
+
899
+ public:
900
+
901
+ TaskGraph(int task_queue_size)
902
+ {
903
+ fTaskQueueSize = task_queue_size;
904
+ fTaskList = new int[fTaskQueueSize];
905
+ for (int i = 0; i < fTaskQueueSize; i++) {
906
+ fTaskList[i] = 0;
907
+ }
908
+ }
909
+
910
+ INLINE ~TaskGraph()
911
+ {
912
+ delete[] fTaskList;
913
+ }
914
+
915
+ INLINE void InitTask(int task, int val)
916
+ {
917
+ fTaskList[task] = val;
918
+ }
919
+
920
+ void Display()
921
+ {
922
+ for (int i = 0; i < fTaskQueueSize; i++) {
923
+ printf("Task = %d activation = %d\n", i, fTaskList[i]);
924
+ }
925
+ }
926
+
927
+ INLINE void ActivateOutputTask(TaskQueue& queue, int task, int* tasknum)
928
+ {
929
+ if (DEC_ATOMIC(&fTaskList[task]) == 0) {
930
+ if (*tasknum == WORK_STEALING_INDEX) {
931
+ *tasknum = task;
932
+ } else {
933
+ queue.PushHead(task);
934
+ }
935
+ }
936
+ }
937
+
938
+ INLINE void ActivateOutputTask(TaskQueue& queue, int task)
939
+ {
940
+ if (DEC_ATOMIC(&fTaskList[task]) == 0) {
941
+ queue.PushHead(task);
942
+ }
943
+ }
944
+
945
+ INLINE void ActivateOneOutputTask(TaskQueue& queue, int task, int* tasknum)
946
+ {
947
+ if (DEC_ATOMIC(&fTaskList[task]) == 0) {
948
+ *tasknum = task;
949
+ } else {
950
+ *tasknum = queue.PopHead();
951
+ }
952
+ }
953
+
954
+ INLINE void GetReadyTask(TaskQueue& queue, int* tasknum)
955
+ {
956
+ if (*tasknum == WORK_STEALING_INDEX) {
957
+ *tasknum = queue.PopHead();
958
+ }
959
+ }
960
+
961
+ };
962
+
963
+ class DSPThread;
964
+
965
+ class DSPThreadPool {
966
+
967
+ private:
968
+
969
+ DSPThread** fThreadPool;
970
+ int fThreadCount;
971
+ volatile int fCurThreadCount;
972
+
973
+ public:
974
+
975
+ DSPThreadPool(int thread_pool_size);
976
+ ~DSPThreadPool();
977
+
978
+ void StartAll(int num_thread, bool realtime, void* dsp);
979
+
980
+ void StopAll();
981
+
982
+ void SignalAll(int num_thread);
983
+
984
+ void SignalOne()
985
+ {
986
+ DEC_ATOMIC(&fCurThreadCount);
987
+ }
988
+
989
+ bool IsFinished()
990
+ {
991
+ return (fCurThreadCount == 0);
992
+ }
993
+
994
+ };
995
+
996
+ class DSPThread {
997
+
998
+ private:
999
+
1000
+ pthread_t fThread;
1001
+ DSPThreadPool* fThreadPool;
1002
+ Semaphore fSemaphore;
1003
+ bool fRealTime;
1004
+ int fNumThread;
1005
+ void* fDSP;
1006
+
1007
+ static void* ThreadHandler(void* arg)
1008
+ {
1009
+ DSPThread* thread = static_cast<DSPThread*>(arg);
1010
+
1011
+ AVOIDDENORMALS;
1012
+ get_affinity(thread->fThread);
1013
+
1014
+ // One "dummy" cycle to setup thread
1015
+ if (thread->fRealTime) {
1016
+ thread->Run();
1017
+ SetRealTime();
1018
+ }
1019
+
1020
+ while (true) {
1021
+ thread->Run();
1022
+ }
1023
+
1024
+ return NULL;
1025
+ }
1026
+
1027
+ public:
1028
+
1029
+ DSPThread(int num_thread, DSPThreadPool* pool, void* dsp)
1030
+ :fThreadPool(pool), fSemaphore(0), fRealTime(false), fNumThread(num_thread), fDSP(dsp)
1031
+ {}
1032
+
1033
+ virtual ~DSPThread()
1034
+ {}
1035
+
1036
+ void Run()
1037
+ {
1038
+ fSemaphore.wait();
1039
+ computeThreadExternal(fDSP, fNumThread + 1);
1040
+ //fThreadPool->SignalOne();
1041
+ }
1042
+
1043
+ void Signal()
1044
+ {
1045
+ fSemaphore.post();
1046
+ }
1047
+
1048
+ int Start(bool realtime)
1049
+ {
1050
+ pthread_attr_t attributes;
1051
+ struct sched_param rt_param;
1052
+ pthread_attr_init(&attributes);
1053
+
1054
+ int priority = 60; // TODO
1055
+ int res;
1056
+
1057
+ if (realtime) {
1058
+ fRealTime = true;
1059
+ }else {
1060
+ fRealTime = getenv("OMP_REALTIME") ? strtol(getenv("OMP_REALTIME"), NULL, 10) : true;
1061
+ }
1062
+
1063
+ if ((res = pthread_attr_setdetachstate(&attributes, PTHREAD_CREATE_JOINABLE))) {
1064
+ printf("Cannot request joinable thread creation for real-time thread res = %d err = %s\n", res, strerror(errno));
1065
+ return -1;
1066
+ }
1067
+
1068
+ if ((res = pthread_attr_setscope(&attributes, PTHREAD_SCOPE_SYSTEM))) {
1069
+ printf("Cannot set scheduling scope for real-time thread res = %d err = %s\n", res, strerror(errno));
1070
+ return -1;
1071
+ }
1072
+
1073
+ if (realtime) {
1074
+
1075
+ if ((res = pthread_attr_setinheritsched(&attributes, PTHREAD_EXPLICIT_SCHED))) {
1076
+ printf("Cannot request explicit scheduling for RT thread res = %d err = %s\n", res, strerror(errno));
1077
+ return -1;
1078
+ }
1079
+
1080
+ if ((res = pthread_attr_setschedpolicy(&attributes, JACK_SCHED_POLICY))) {
1081
+ printf("Cannot set RR scheduling class for RT thread res = %d err = %s\n", res, strerror(errno));
1082
+ return -1;
1083
+ }
1084
+
1085
+ memset(&rt_param, 0, sizeof(rt_param));
1086
+ rt_param.sched_priority = priority;
1087
+
1088
+ if ((res = pthread_attr_setschedparam(&attributes, &rt_param))) {
1089
+ printf("Cannot set scheduling priority for RT thread res = %d err = %s\n", res, strerror(errno));
1090
+ return -1;
1091
+ }
1092
+
1093
+ } else {
1094
+
1095
+ if ((res = pthread_attr_setinheritsched(&attributes, PTHREAD_INHERIT_SCHED))) {
1096
+ printf("Cannot request explicit scheduling for RT thread res = %d err = %s\n", res, strerror(errno));
1097
+ return -1;
1098
+ }
1099
+ }
1100
+
1101
+ if ((res = pthread_attr_setstacksize(&attributes, THREAD_STACK))) {
1102
+ printf("Cannot set thread stack size res = %d err = %s\n", res, strerror(errno));
1103
+ return -1;
1104
+ }
1105
+
1106
+ if ((res = pthread_create(&fThread, &attributes, ThreadHandler, this))) {
1107
+ printf("Cannot create thread res = %d err = %s\n", res, strerror(errno));
1108
+ return -1;
1109
+ }
1110
+
1111
+ // Set affinity
1112
+ set_affinity(fThread, fNumThread + 1);
1113
+
1114
+ pthread_attr_destroy(&attributes);
1115
+ return 0;
1116
+ }
1117
+
1118
+ void Stop()
1119
+ {
1120
+ CancelThread(fThread);
1121
+ }
1122
+
1123
+ };
1124
+
1125
+ DSPThreadPool::DSPThreadPool(int thread_pool_size)
1126
+ {
1127
+ fThreadPool = new DSPThread*[thread_pool_size];
1128
+ for (int i = 0; i < thread_pool_size; i++) {
1129
+ fThreadPool[i] = NULL;
1130
+ }
1131
+ fThreadCount = 0;
1132
+ fCurThreadCount = 0;
1133
+ }
1134
+
1135
+ DSPThreadPool::~DSPThreadPool()
1136
+ {
1137
+ StopAll();
1138
+
1139
+ for (int i = 0; i < fThreadCount; i++) {
1140
+ delete(fThreadPool[i]);
1141
+ fThreadPool[i] = NULL;
1142
+ }
1143
+
1144
+ fThreadCount = 0;
1145
+ delete[] fThreadPool;
1146
+ }
1147
+
1148
+ void DSPThreadPool::StartAll(int num_thread, bool realtime, void* dsp)
1149
+ {
1150
+ if (fThreadCount == 0) { // Protection for multiple call... (like LADSPA plug-ins in Ardour)
1151
+ for (int i = 0; i < num_thread; i++) {
1152
+ fThreadPool[i] = new DSPThread(i, this, dsp);
1153
+ fThreadPool[i]->Start(realtime);
1154
+ fThreadCount++;
1155
+ }
1156
+ }
1157
+ }
1158
+
1159
+ void DSPThreadPool::StopAll()
1160
+ {
1161
+ for (int i = 0; i < fThreadCount; i++) {
1162
+ fThreadPool[i]->Stop();
1163
+ }
1164
+ }
1165
+
1166
+ void DSPThreadPool::SignalAll(int num_thread)
1167
+ {
1168
+ fCurThreadCount = num_thread;
1169
+
1170
+ for (int i = 0; i < num_thread; i++) { // Important : use local num here...
1171
+ fThreadPool[i]->Signal();
1172
+ }
1173
+ }
1174
+
1175
+ /*
1176
+ Public C++ interface
1177
+ */
1178
+
1179
+ class WorkStealingScheduler {
1180
+
1181
+ private:
1182
+
1183
+ DSPThreadPool* fThreadPool;
1184
+ TaskQueue* fTaskQueueList;
1185
+ TaskGraph* fTaskGraph;
1186
+
1187
+ DynThreadAdapter fDynThreadAdapter;
1188
+
1189
+ int fDynamicNumThreads;
1190
+ int fStaticNumThreads;
1191
+
1192
+ int* fReadyTaskList;
1193
+ int fReadyTaskListSize;
1194
+ int fReadyTaskListIndex;
1195
+
1196
+ public:
1197
+
1198
+ WorkStealingScheduler(int task_queue_size, int init_task_list_size)
1199
+ {
1200
+ fStaticNumThreads = get_max_cpu();
1201
+ fDynamicNumThreads = getenv("OMP_NUM_THREADS") ? atoi(getenv("OMP_NUM_THREADS")) : fStaticNumThreads;
1202
+
1203
+ fThreadPool = new DSPThreadPool(fStaticNumThreads);
1204
+ fTaskGraph = new TaskGraph(task_queue_size);
1205
+ fTaskQueueList = new TaskQueue[fStaticNumThreads];
1206
+ for (int i = 0; i < fStaticNumThreads; i++) {
1207
+ fTaskQueueList[i].Init(task_queue_size);
1208
+ }
1209
+
1210
+ fReadyTaskListSize = init_task_list_size;
1211
+ fReadyTaskList = new int[fReadyTaskListSize];
1212
+ fReadyTaskListIndex = 0;
1213
+ }
1214
+
1215
+ ~WorkStealingScheduler()
1216
+ {
1217
+ delete fThreadPool;
1218
+ delete fTaskGraph;
1219
+ delete[] fTaskQueueList;
1220
+ delete[] fReadyTaskList;
1221
+ }
1222
+
1223
+ void AddReadyTask(int task_num)
1224
+ {
1225
+ fReadyTaskList[fReadyTaskListIndex++] = task_num;
1226
+ }
1227
+
1228
+ void StartAll(void* dsp)
1229
+ {
1230
+ fThreadPool->StartAll(fStaticNumThreads - 1, true, dsp);
1231
+ }
1232
+
1233
+ void StopAll()
1234
+ {
1235
+ fThreadPool->StopAll();
1236
+ }
1237
+
1238
+ void SignalAll()
1239
+ {
1240
+ GetRealTime();
1241
+ fDynThreadAdapter.StartMeasure();
1242
+ fThreadPool->SignalAll(fDynamicNumThreads - 1);
1243
+ }
1244
+
1245
+ void SyncAll()
1246
+ {
1247
+ //while (!fThreadPool->IsFinished()) {}
1248
+ fDynThreadAdapter.StopMeasure(fStaticNumThreads, fDynamicNumThreads);
1249
+ }
1250
+
1251
+ void PushHead(int cur_thread, int task_num)
1252
+ {
1253
+ fTaskQueueList[cur_thread].PushHead(task_num);
1254
+ }
1255
+
1256
+ int GetNextTask(int cur_thread)
1257
+ {
1258
+ return TaskQueue::GetNextTask(fTaskQueueList, cur_thread, fDynamicNumThreads);
1259
+ }
1260
+
1261
+ void InitTask(int task_num, int count)
1262
+ {
1263
+ fTaskGraph->InitTask(task_num, count);
1264
+ }
1265
+
1266
+ void ActivateOutputTask(int cur_thread, int task, int* task_num)
1267
+ {
1268
+ fTaskGraph->ActivateOutputTask(fTaskQueueList[cur_thread], task, task_num);
1269
+ }
1270
+
1271
+ void ActivateOutputTask(int cur_thread, int task)
1272
+ {
1273
+ fTaskGraph->ActivateOutputTask(fTaskQueueList[cur_thread], task);
1274
+ }
1275
+
1276
+ void ActivateOneOutputTask(int cur_thread, int task, int* task_num)
1277
+ {
1278
+ fTaskGraph->ActivateOneOutputTask(fTaskQueueList[cur_thread], task, task_num);
1279
+ }
1280
+
1281
+ void GetReadyTask(int cur_thread, int* task_num)
1282
+ {
1283
+ fTaskGraph->GetReadyTask(fTaskQueueList[cur_thread], task_num);
1284
+ }
1285
+
1286
+ void InitTaskList(int cur_thread)
1287
+ {
1288
+ TaskQueue::InitAll(fTaskQueueList, fDynamicNumThreads);
1289
+ if (cur_thread == -1) {
1290
+ // Dispatch on all WSQ
1291
+ for (int i = 0; i < fDynamicNumThreads; i++) {
1292
+ fTaskQueueList[i].InitTaskList(fReadyTaskListSize, fReadyTaskList, fDynamicNumThreads, i);
1293
+ }
1294
+ } else {
1295
+ // Otherwise push all ready tasks in cur_thread WSQ
1296
+ for (int i = 0; i < fReadyTaskListSize; i++) {
1297
+ fTaskQueueList[cur_thread].PushHead(fReadyTaskList[i]);
1298
+ }
1299
+ }
1300
+ }
1301
+
1302
+ };
1303
+
1304
+ /*
1305
+ C scheduler interface
1306
+ */
1307
+
1308
+ #ifdef _WIN32
1309
+ #define EXPORT __declspec(dllexport) __attribute__((always_inline))
1310
+ #else
1311
+ #define EXPORT inline __attribute__ ((visibility("default"))) __attribute__((always_inline))
1312
+ #endif
1313
+
1314
+ EXPORT void* createScheduler(int task_queue_size, int init_task_list_size)
1315
+ {
1316
+ return new WorkStealingScheduler(task_queue_size, init_task_list_size);
1317
+ }
1318
+
1319
+ EXPORT void deleteScheduler(void* scheduler)
1320
+ {
1321
+ delete(static_cast<WorkStealingScheduler*>(scheduler));
1322
+ }
1323
+
1324
+ EXPORT void startAll(void* scheduler, void* dsp)
1325
+ {
1326
+ static_cast<WorkStealingScheduler*>(scheduler)->StartAll(dsp);
1327
+ }
1328
+
1329
+ EXPORT void stopAll(void* scheduler)
1330
+ {
1331
+ static_cast<WorkStealingScheduler*>(scheduler)->StopAll();
1332
+ }
1333
+
1334
+ EXPORT void signalAll(void* scheduler)
1335
+ {
1336
+ static_cast<WorkStealingScheduler*>(scheduler)->SignalAll();
1337
+ }
1338
+
1339
+ EXPORT void syncAll(void* scheduler)
1340
+ {
1341
+ static_cast<WorkStealingScheduler*>(scheduler)->SyncAll();
1342
+ }
1343
+
1344
+ EXPORT void pushHead(void* scheduler, int cur_thread, int task_num)
1345
+ {
1346
+ static_cast<WorkStealingScheduler*>(scheduler)->PushHead(cur_thread, task_num);
1347
+ }
1348
+
1349
+ EXPORT int getNextTask(void* scheduler, int cur_thread)
1350
+ {
1351
+ return static_cast<WorkStealingScheduler*>(scheduler)->GetNextTask(cur_thread);
1352
+ }
1353
+
1354
+ EXPORT void initTask(void* scheduler, int task_num, int count)
1355
+ {
1356
+ static_cast<WorkStealingScheduler*>(scheduler)->InitTask(task_num, count);
1357
+ }
1358
+
1359
+ EXPORT void activateOutputTask1(void* scheduler, int cur_thread, int task, int* task_num)
1360
+ {
1361
+ static_cast<WorkStealingScheduler*>(scheduler)->ActivateOutputTask(cur_thread, task, task_num);
1362
+ }
1363
+
1364
+ EXPORT void activateOutputTask2(void* scheduler, int cur_thread, int task)
1365
+ {
1366
+ static_cast<WorkStealingScheduler*>(scheduler)->ActivateOutputTask(cur_thread, task);
1367
+ }
1368
+
1369
+ EXPORT void activateOneOutputTask(void* scheduler, int cur_thread, int task, int* task_num)
1370
+ {
1371
+ static_cast<WorkStealingScheduler*>(scheduler)->ActivateOneOutputTask(cur_thread, task, task_num);
1372
+ }
1373
+
1374
+ EXPORT void getReadyTask(void* scheduler, int cur_thread, int* task_num)
1375
+ {
1376
+ static_cast<WorkStealingScheduler*>(scheduler)->GetReadyTask(cur_thread, task_num);
1377
+ }
1378
+
1379
+ EXPORT void initTaskList(void* scheduler, int cur_thread)
1380
+ {
1381
+ static_cast<WorkStealingScheduler*>(scheduler)->InitTaskList(cur_thread);
1382
+ }
1383
+
1384
+ EXPORT void addReadyTask(void* scheduler, int task_num)
1385
+ {
1386
+ static_cast<WorkStealingScheduler*>(scheduler)->AddReadyTask(task_num);
1387
+ }
1388
+
1389
+ #ifdef __cplusplus
1390
+ }
1391
+ #endif