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.
- cyfaust/CMakeLists.txt +93 -0
- cyfaust/__init__.py +0 -0
- cyfaust/__main__.py +819 -0
- cyfaust/box.pxd +46 -0
- cyfaust/box.pyx +2459 -0
- cyfaust/common.pxd +5 -0
- cyfaust/common.pyx +61 -0
- cyfaust/cyfaust.cpython-311-darwin.so +0 -0
- cyfaust/faust_box.pxd +298 -0
- cyfaust/faust_box_oo.pyx +66 -0
- cyfaust/faust_gui.pxd +261 -0
- cyfaust/faust_interp.pxd +160 -0
- cyfaust/faust_player.pxd +80 -0
- cyfaust/faust_signal.pxd +257 -0
- cyfaust/gui_statics.cpp +15 -0
- cyfaust/interp.pyx +673 -0
- cyfaust/player.cpp +32519 -0
- cyfaust/player.pyx +191 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUBase.cpp +2327 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUBase.h +1019 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUDispatch.cpp +423 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUDispatch.h +82 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUInputElement.cpp +151 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUInputElement.h +119 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUOutputElement.cpp +62 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUOutputElement.h +66 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUPlugInDispatch.cpp +615 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUPlugInDispatch.h +128 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUScopeElement.cpp +512 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/AUScopeElement.h +544 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/ComponentBase.cpp +370 -0
- cyfaust/resources/architecture/AU/AUPublic/AUBase/ComponentBase.h +340 -0
- cyfaust/resources/architecture/AU/AUPublic/AUEffectBase/AUEffectBase.cpp +463 -0
- cyfaust/resources/architecture/AU/AUPublic/AUEffectBase/AUEffectBase.h +391 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/AUInstrumentBase.cpp +837 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/AUInstrumentBase.h +267 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/AUMIDIBase.cpp +495 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/AUMIDIBase.h +213 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/LockFreeFIFO.h +168 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/MIDIControlHandler.h +92 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/MusicDeviceBase.cpp +354 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/MusicDeviceBase.h +126 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthElement.cpp +419 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthElement.h +227 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthEvent.h +145 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthNote.cpp +138 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthNote.h +186 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthNoteList.cpp +93 -0
- cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthNoteList.h +232 -0
- cyfaust/resources/architecture/AU/AUPublic/Utility/AUBaseHelper.cpp +134 -0
- cyfaust/resources/architecture/AU/AUPublic/Utility/AUBaseHelper.h +80 -0
- cyfaust/resources/architecture/AU/AUPublic/Utility/AUBuffer.cpp +217 -0
- cyfaust/resources/architecture/AU/AUPublic/Utility/AUBuffer.h +267 -0
- cyfaust/resources/architecture/AU/AUPublic/Utility/AUMIDIDefs.h +136 -0
- cyfaust/resources/architecture/AU/AUPublic/Utility/AUSilentTimeout.h +93 -0
- cyfaust/resources/architecture/AU/English.lproj/InfoPlist.strings +0 -0
- cyfaust/resources/architecture/AU/FaustAU.exp +2 -0
- cyfaust/resources/architecture/AU/FaustAU.xcodeproj/project.pbxproj +968 -0
- cyfaust/resources/architecture/AU/FaustAU.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- cyfaust/resources/architecture/AU/FaustAUCustomView.plist +14 -0
- cyfaust/resources/architecture/AU/Info.plist +47 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAAtomic.h +305 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAAtomicStack.h +239 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAAudioChannelLayout.cpp +153 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAAudioChannelLayout.h +199 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAAutoDisposer.h +508 -0
- cyfaust/resources/architecture/AU/PublicUtility/CABufferList.cpp +264 -0
- cyfaust/resources/architecture/AU/PublicUtility/CABufferList.h +319 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAByteOrder.h +161 -0
- cyfaust/resources/architecture/AU/PublicUtility/CADebugMacros.cpp +88 -0
- cyfaust/resources/architecture/AU/PublicUtility/CADebugMacros.h +580 -0
- cyfaust/resources/architecture/AU/PublicUtility/CADebugPrintf.cpp +89 -0
- cyfaust/resources/architecture/AU/PublicUtility/CADebugPrintf.h +115 -0
- cyfaust/resources/architecture/AU/PublicUtility/CADebugger.cpp +77 -0
- cyfaust/resources/architecture/AU/PublicUtility/CADebugger.h +56 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAException.h +83 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAGuard.cpp +339 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAGuard.h +133 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAHostTimeBase.cpp +110 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAHostTimeBase.h +231 -0
- cyfaust/resources/architecture/AU/PublicUtility/CALogMacros.h +140 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAMath.h +68 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAMutex.cpp +345 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAMutex.h +163 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAReferenceCounted.h +87 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAStreamBasicDescription.cpp +795 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAStreamBasicDescription.h +409 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAThreadSafeList.h +255 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAVectorUnit.cpp +191 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAVectorUnit.h +100 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAVectorUnitTypes.h +59 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAXException.cpp +49 -0
- cyfaust/resources/architecture/AU/PublicUtility/CAXException.h +338 -0
- cyfaust/resources/architecture/AU/SectionPatternLight.tiff +0 -0
- cyfaust/resources/architecture/AU/Source/AUSource/FaustAU.h +38 -0
- cyfaust/resources/architecture/AU/Source/AUSource/FaustAU.r +153 -0
- cyfaust/resources/architecture/AU/Source/AUSource/FaustAUVersion.h +64 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Bargraph.h +18 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Bargraph.m +21 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Button.h +20 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Button.m +56 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_CustomView.h +87 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_CustomView.m +834 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_CustomViewFactory.h +13 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_CustomViewFactory.m +22 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Knob.h +81 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Knob.m +199 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Slider.h +18 -0
- cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Slider.m +21 -0
- cyfaust/resources/architecture/AU/version.plist +16 -0
- cyfaust/resources/architecture/VST/Info.plist +28 -0
- cyfaust/resources/architecture/VST/PkgInfo +1 -0
- cyfaust/resources/architecture/VST/README +11 -0
- cyfaust/resources/architecture/VST/VST.xcode/project.pbxproj +655 -0
- cyfaust/resources/architecture/alsa-console.cpp +246 -0
- cyfaust/resources/architecture/alsa-gtk.cpp +220 -0
- cyfaust/resources/architecture/alsa-qt.cpp +229 -0
- cyfaust/resources/architecture/api/DspFaust.cpp +612 -0
- cyfaust/resources/architecture/api/DspFaust.h +511 -0
- cyfaust/resources/architecture/api/README.md +237 -0
- cyfaust/resources/architecture/api/doc/Generic.md +38 -0
- cyfaust/resources/architecture/au-effect.cpp +487 -0
- cyfaust/resources/architecture/au-instrument.cpp +573 -0
- cyfaust/resources/architecture/bench.cpp +91 -0
- cyfaust/resources/architecture/c-jack-gtk.c +227 -0
- cyfaust/resources/architecture/ca-gtk.cpp +284 -0
- cyfaust/resources/architecture/ca-qt.cpp +424 -0
- cyfaust/resources/architecture/cpal.rs +195 -0
- cyfaust/resources/architecture/csound.cpp +245 -0
- cyfaust/resources/architecture/csvplot.cpp +227 -0
- cyfaust/resources/architecture/daisy/Makefile +14 -0
- cyfaust/resources/architecture/daisy/README.md +50 -0
- cyfaust/resources/architecture/daisy/ex_faust.cpp +173 -0
- cyfaust/resources/architecture/dssi.cpp +1262 -0
- cyfaust/resources/architecture/dummy-mem.cpp +186 -0
- cyfaust/resources/architecture/dummy.cpp +294 -0
- cyfaust/resources/architecture/faust/au/AUUI.h +404 -0
- cyfaust/resources/architecture/faust/audio/alsa-dsp.h +693 -0
- cyfaust/resources/architecture/faust/audio/android-dsp.h +583 -0
- cyfaust/resources/architecture/faust/audio/audio.h +115 -0
- cyfaust/resources/architecture/faust/audio/channels.h +122 -0
- cyfaust/resources/architecture/faust/audio/coreaudio-dsp.h +1543 -0
- cyfaust/resources/architecture/faust/audio/coreaudio-ios-dsp.h +743 -0
- cyfaust/resources/architecture/faust/audio/dummy-audio.h +255 -0
- cyfaust/resources/architecture/faust/audio/esp32-dsp.h +284 -0
- cyfaust/resources/architecture/faust/audio/fpe.h +164 -0
- cyfaust/resources/architecture/faust/audio/jack-dsp.h +534 -0
- cyfaust/resources/architecture/faust/audio/juce-dsp.h +119 -0
- cyfaust/resources/architecture/faust/audio/netjack-dsp.h +354 -0
- cyfaust/resources/architecture/faust/audio/oboe-dsp.h +308 -0
- cyfaust/resources/architecture/faust/audio/ofaudio-dsp.h +155 -0
- cyfaust/resources/architecture/faust/audio/opensles-android-dsp.h +631 -0
- cyfaust/resources/architecture/faust/audio/osc-dsp.h +120 -0
- cyfaust/resources/architecture/faust/audio/portaudio-dsp.h +236 -0
- cyfaust/resources/architecture/faust/audio/rtaudio-dsp.h +241 -0
- cyfaust/resources/architecture/faust/audio/samAudio.h +140 -0
- cyfaust/resources/architecture/faust/audio/teensy-dsp.h +171 -0
- cyfaust/resources/architecture/faust/dsp/cmajor-cpp-dsp.h +253 -0
- cyfaust/resources/architecture/faust/dsp/cmajorpatch-dsp.h +483 -0
- cyfaust/resources/architecture/faust/dsp/cpp-dsp-adapter.h +38 -0
- cyfaust/resources/architecture/faust/dsp/dsp-adapter.h +836 -0
- cyfaust/resources/architecture/faust/dsp/dsp-bench.h +611 -0
- cyfaust/resources/architecture/faust/dsp/dsp-checker.h +115 -0
- cyfaust/resources/architecture/faust/dsp/dsp-combiner.h +810 -0
- cyfaust/resources/architecture/faust/dsp/dsp-compute-adapter.h +159 -0
- cyfaust/resources/architecture/faust/dsp/dsp-multi.h +702 -0
- cyfaust/resources/architecture/faust/dsp/dsp-multifun.h +90 -0
- cyfaust/resources/architecture/faust/dsp/dsp-optimizer.h +511 -0
- cyfaust/resources/architecture/faust/dsp/dsp-tools.h +229 -0
- cyfaust/resources/architecture/faust/dsp/dsp.h +321 -0
- cyfaust/resources/architecture/faust/dsp/fastmath.cpp +301 -0
- cyfaust/resources/architecture/faust/dsp/faust-dynamic-engine.cpp +494 -0
- cyfaust/resources/architecture/faust/dsp/faust-dynamic-engine.h +386 -0
- cyfaust/resources/architecture/faust/dsp/faust-engine.h +75 -0
- cyfaust/resources/architecture/faust/dsp/faust-poly-engine.h +638 -0
- cyfaust/resources/architecture/faust/dsp/interpreter-dsp-c.h +288 -0
- cyfaust/resources/architecture/faust/dsp/interpreter-dsp.h +362 -0
- cyfaust/resources/architecture/faust/dsp/interpreter-machine-dsp.h +233 -0
- cyfaust/resources/architecture/faust/dsp/libfaust-box-c.h +817 -0
- cyfaust/resources/architecture/faust/dsp/libfaust-box.h +889 -0
- cyfaust/resources/architecture/faust/dsp/libfaust-c.h +116 -0
- cyfaust/resources/architecture/faust/dsp/libfaust-signal-c.h +649 -0
- cyfaust/resources/architecture/faust/dsp/libfaust-signal.h +731 -0
- cyfaust/resources/architecture/faust/dsp/llvm-dsp-adapter.h +160 -0
- cyfaust/resources/architecture/faust/dsp/llvm-dsp-c.h +524 -0
- cyfaust/resources/architecture/faust/dsp/llvm-dsp.h +575 -0
- cyfaust/resources/architecture/faust/dsp/llvm-machine-dsp.h +215 -0
- cyfaust/resources/architecture/faust/dsp/one-sample-dsp.h +477 -0
- cyfaust/resources/architecture/faust/dsp/poly-dsp.h +1079 -0
- cyfaust/resources/architecture/faust/dsp/poly-interpreter-dsp.h +143 -0
- cyfaust/resources/architecture/faust/dsp/poly-llvm-dsp.h +249 -0
- cyfaust/resources/architecture/faust/dsp/poly-wasm-dsp.h +257 -0
- cyfaust/resources/architecture/faust/dsp/proxy-dsp.h +108 -0
- cyfaust/resources/architecture/faust/dsp/proxy-osc-dsp.h +109 -0
- cyfaust/resources/architecture/faust/dsp/rnbo-dsp.h +187 -0
- cyfaust/resources/architecture/faust/dsp/sound-player.h +428 -0
- cyfaust/resources/architecture/faust/dsp/timed-dsp.h +279 -0
- cyfaust/resources/architecture/faust/dsp/wasm-dsp-imp.h +188 -0
- cyfaust/resources/architecture/faust/dsp/wasm-dsp.h +309 -0
- cyfaust/resources/architecture/faust/dsp/ysfx-dsp.h +188 -0
- cyfaust/resources/architecture/faust/export.h +61 -0
- cyfaust/resources/architecture/faust/gui/APIUI.h +726 -0
- cyfaust/resources/architecture/faust/gui/BelaOSCUI.h +170 -0
- cyfaust/resources/architecture/faust/gui/CGlue.h +667 -0
- cyfaust/resources/architecture/faust/gui/CInterface.h +142 -0
- cyfaust/resources/architecture/faust/gui/ControlSequenceUI.h +197 -0
- cyfaust/resources/architecture/faust/gui/ControlUI.h +137 -0
- cyfaust/resources/architecture/faust/gui/DaisyControlUI.h +283 -0
- cyfaust/resources/architecture/faust/gui/DaisyPatchInitControlUI.h +254 -0
- cyfaust/resources/architecture/faust/gui/DecoratorUI.h +115 -0
- cyfaust/resources/architecture/faust/gui/Esp32ControlUI.h +341 -0
- cyfaust/resources/architecture/faust/gui/Esp32Reader.h +102 -0
- cyfaust/resources/architecture/faust/gui/Esp32SensorUI.h +137 -0
- cyfaust/resources/architecture/faust/gui/FUI.h +147 -0
- cyfaust/resources/architecture/faust/gui/GTKUI.h +1414 -0
- cyfaust/resources/architecture/faust/gui/GUI.h +465 -0
- cyfaust/resources/architecture/faust/gui/JSONControl.h +48 -0
- cyfaust/resources/architecture/faust/gui/JSONUI.h +722 -0
- cyfaust/resources/architecture/faust/gui/JSONUIDecoder.h +589 -0
- cyfaust/resources/architecture/faust/gui/JuceGUI.h +2061 -0
- cyfaust/resources/architecture/faust/gui/JuceOSCUI.h +163 -0
- cyfaust/resources/architecture/faust/gui/JuceParameterUI.h +158 -0
- cyfaust/resources/architecture/faust/gui/JuceReader.h +103 -0
- cyfaust/resources/architecture/faust/gui/JuceStateUI.h +88 -0
- cyfaust/resources/architecture/faust/gui/LayoutUI.h +423 -0
- cyfaust/resources/architecture/faust/gui/LibsndfileReader.h +366 -0
- cyfaust/resources/architecture/faust/gui/MapUI.h +370 -0
- cyfaust/resources/architecture/faust/gui/MemoryReader.h +111 -0
- cyfaust/resources/architecture/faust/gui/MetaDataUI.h +357 -0
- cyfaust/resources/architecture/faust/gui/MidiUI.h +939 -0
- cyfaust/resources/architecture/faust/gui/OCVUI.h +688 -0
- cyfaust/resources/architecture/faust/gui/OSCUI.h +219 -0
- cyfaust/resources/architecture/faust/gui/PathBuilder.h +228 -0
- cyfaust/resources/architecture/faust/gui/PresetUI.h +337 -0
- cyfaust/resources/architecture/faust/gui/PrintCUI.h +152 -0
- cyfaust/resources/architecture/faust/gui/PrintUI.h +121 -0
- cyfaust/resources/architecture/faust/gui/QTUI.h +1891 -0
- cyfaust/resources/architecture/faust/gui/RosCI.h +493 -0
- cyfaust/resources/architecture/faust/gui/RosUI.h +488 -0
- cyfaust/resources/architecture/faust/gui/SaveUI.h +163 -0
- cyfaust/resources/architecture/faust/gui/SimpleParser.h +583 -0
- cyfaust/resources/architecture/faust/gui/SoundUI.h +217 -0
- cyfaust/resources/architecture/faust/gui/Soundfile.h +342 -0
- cyfaust/resources/architecture/faust/gui/Styles/Blue.qrc +5 -0
- cyfaust/resources/architecture/faust/gui/Styles/Blue.qss +177 -0
- cyfaust/resources/architecture/faust/gui/Styles/Default.qrc +5 -0
- cyfaust/resources/architecture/faust/gui/Styles/Default.qss +117 -0
- cyfaust/resources/architecture/faust/gui/Styles/Grey.qrc +5 -0
- cyfaust/resources/architecture/faust/gui/Styles/Grey.qss +174 -0
- cyfaust/resources/architecture/faust/gui/Styles/Salmon.qrc +5 -0
- cyfaust/resources/architecture/faust/gui/Styles/Salmon.qss +171 -0
- cyfaust/resources/architecture/faust/gui/UI.h +87 -0
- cyfaust/resources/architecture/faust/gui/ValueConverter.h +543 -0
- cyfaust/resources/architecture/faust/gui/WaveReader.h +364 -0
- cyfaust/resources/architecture/faust/gui/console.h +322 -0
- cyfaust/resources/architecture/faust/gui/httpdUI.h +372 -0
- cyfaust/resources/architecture/faust/gui/meta.h +39 -0
- cyfaust/resources/architecture/faust/gui/mspUI.h +580 -0
- cyfaust/resources/architecture/faust/gui/qrcodegen.h +269 -0
- cyfaust/resources/architecture/faust/gui/qrcodegen.impl.h +1025 -0
- cyfaust/resources/architecture/faust/gui/ring-buffer.h +414 -0
- cyfaust/resources/architecture/faust/midi/RtMidi.cpp +3054 -0
- cyfaust/resources/architecture/faust/midi/RtMidi.h +1034 -0
- cyfaust/resources/architecture/faust/midi/bela-midi.h +266 -0
- cyfaust/resources/architecture/faust/midi/daisy-midi.h +116 -0
- cyfaust/resources/architecture/faust/midi/esp32-midi.h +185 -0
- cyfaust/resources/architecture/faust/midi/gramophone-midi.h +107 -0
- cyfaust/resources/architecture/faust/midi/iplug2-midi.h +148 -0
- cyfaust/resources/architecture/faust/midi/jack-midi.h +247 -0
- cyfaust/resources/architecture/faust/midi/juce-midi.h +275 -0
- cyfaust/resources/architecture/faust/midi/midi.h +475 -0
- cyfaust/resources/architecture/faust/midi/rt-midi.h +315 -0
- cyfaust/resources/architecture/faust/midi/teensy-midi.h +89 -0
- cyfaust/resources/architecture/faust/misc.h +106 -0
- cyfaust/resources/architecture/faust/sound-file.h +132 -0
- cyfaust/resources/architecture/faust/unity/AudioPluginInterface.h +301 -0
- cyfaust/resources/architecture/faust/vst/faust.h +141 -0
- cyfaust/resources/architecture/faust/vst/voice.h +43 -0
- cyfaust/resources/architecture/faust/vst/vstui.h +524 -0
- cyfaust/resources/architecture/faustvst.cpp +3435 -0
- cyfaust/resources/architecture/faustvstqt.h +91 -0
- cyfaust/resources/architecture/gen-json.cpp +76 -0
- cyfaust/resources/architecture/jack-console.cpp +267 -0
- cyfaust/resources/architecture/jack-gtk-ros.cpp +139 -0
- cyfaust/resources/architecture/jack-gtk.cpp +282 -0
- cyfaust/resources/architecture/jack-internal.cpp +560 -0
- cyfaust/resources/architecture/jack-qt-chain-footer.cpp +87 -0
- cyfaust/resources/architecture/jack-qt-chain-header.cpp +92 -0
- cyfaust/resources/architecture/jack-qt.cpp +281 -0
- cyfaust/resources/architecture/jack.rs +171 -0
- cyfaust/resources/architecture/juce/README.md +84 -0
- cyfaust/resources/architecture/juce/juce-plugin.cpp +809 -0
- cyfaust/resources/architecture/juce/juce-standalone.cpp +413 -0
- cyfaust/resources/architecture/juce/plugin/plugin-llvm.jucer +184 -0
- cyfaust/resources/architecture/juce/plugin/plugin.jucer +159 -0
- cyfaust/resources/architecture/juce/standalone/standalone-llvm.jucer +216 -0
- cyfaust/resources/architecture/juce/standalone/standalone.jucer +191 -0
- cyfaust/resources/architecture/ladspa.cpp +543 -0
- cyfaust/resources/architecture/latexheader.tex +65 -0
- cyfaust/resources/architecture/lv2.cpp +2090 -0
- cyfaust/resources/architecture/lv2qtgui.h +62 -0
- cyfaust/resources/architecture/lv2ui.cpp +1966 -0
- cyfaust/resources/architecture/max-msp/README.md +109 -0
- cyfaust/resources/architecture/max-msp/faustgen-wrapper-poly.maxpat +184 -0
- cyfaust/resources/architecture/max-msp/faustgen-wrapper.maxpat +163 -0
- cyfaust/resources/architecture/max-msp/max-msp.cpp +734 -0
- cyfaust/resources/architecture/max-msp/max-msp64.cpp +789 -0
- cyfaust/resources/architecture/max-msp/py2max/README.md +277 -0
- cyfaust/resources/architecture/max-msp/py2max/py2max/__init__.py +3 -0
- cyfaust/resources/architecture/max-msp/py2max/py2max/common.py +7 -0
- cyfaust/resources/architecture/max-msp/py2max/py2max/core.py +1387 -0
- cyfaust/resources/architecture/max-msp/py2max/py2max/maxclassdb.py +318 -0
- cyfaust/resources/architecture/max-msp/py2max/py2max/utils.py +20 -0
- cyfaust/resources/architecture/max-msp/rnbo.py +1591 -0
- cyfaust/resources/architecture/max-msp/sndfile/sndfile.h +857 -0
- cyfaust/resources/architecture/max-msp/ui.js +230 -0
- cyfaust/resources/architecture/max-msp/wrapper-poly.maxpat +153 -0
- cyfaust/resources/architecture/max-msp/wrapper.maxpat +131 -0
- cyfaust/resources/architecture/minimal-bench.cpp +100 -0
- cyfaust/resources/architecture/minimal-effect.c +149 -0
- cyfaust/resources/architecture/minimal-effect.cpp +70 -0
- cyfaust/resources/architecture/minimal-fixed-point.cpp +195 -0
- cyfaust/resources/architecture/minimal-static.cpp +160 -0
- cyfaust/resources/architecture/minimal.c +103 -0
- cyfaust/resources/architecture/minimal.cpp +84 -0
- cyfaust/resources/architecture/minimal.rs +223 -0
- cyfaust/resources/architecture/module.cpp +91 -0
- cyfaust/resources/architecture/octave.cpp +471 -0
- cyfaust/resources/architecture/oscio-gtk.cpp +115 -0
- cyfaust/resources/architecture/oscio-qt.cpp +121 -0
- cyfaust/resources/architecture/owl.cpp +345 -0
- cyfaust/resources/architecture/pa-gtk.cpp +119 -0
- cyfaust/resources/architecture/pa-qt.cpp +261 -0
- cyfaust/resources/architecture/path-printer.cpp +100 -0
- cyfaust/resources/architecture/plot.cpp +128 -0
- cyfaust/resources/architecture/portaudio.rs +192 -0
- cyfaust/resources/architecture/puredata.cpp +636 -0
- cyfaust/resources/architecture/ra-qt.cpp +238 -0
- cyfaust/resources/architecture/sam/fast_pow2.h +69 -0
- cyfaust/resources/architecture/sam/fastexp.h +140 -0
- cyfaust/resources/architecture/sam/samFaustDSP.cpp +125 -0
- cyfaust/resources/architecture/sam/samFaustDSP.h +107 -0
- cyfaust/resources/architecture/scheduler.cpp +1391 -0
- cyfaust/resources/architecture/sndfile.cpp +291 -0
- cyfaust/resources/architecture/supercollider.cpp +611 -0
- cyfaust/resources/architecture/teensy/README.md +13 -0
- cyfaust/resources/architecture/teensy/teensy.cpp +214 -0
- cyfaust/resources/architecture/teensy/teensy.h +71 -0
- cyfaust/resources/architecture/thread.h +373 -0
- cyfaust/resources/architecture/vcvrack/README.md +78 -0
- cyfaust/resources/architecture/vcvrack/template/.gitignore +6 -0
- cyfaust/resources/architecture/vcvrack/template/Makefile +22 -0
- cyfaust/resources/architecture/vcvrack/template/res/FaustModule.svg +299 -0
- cyfaust/resources/architecture/vcvrack/template/src/FaustModule.cpp +942 -0
- cyfaust/resources/architecture/vst.cpp +947 -0
- cyfaust/resources/libraries/aanl.lib +900 -0
- cyfaust/resources/libraries/all.lib +36 -0
- cyfaust/resources/libraries/analyzers.lib +980 -0
- cyfaust/resources/libraries/basics.lib +2681 -0
- cyfaust/resources/libraries/compressors.lib +1341 -0
- cyfaust/resources/libraries/delays.lib +401 -0
- cyfaust/resources/libraries/demos.lib +1556 -0
- cyfaust/resources/libraries/dx7.lib +1036 -0
- cyfaust/resources/libraries/effect.lib +1645 -0
- cyfaust/resources/libraries/envelopes.lib +666 -0
- cyfaust/resources/libraries/examples/README.md +13 -0
- cyfaust/resources/libraries/examples/ambisonics/fourSourcesToOcto.dsp +20 -0
- cyfaust/resources/libraries/examples/ambisonics/oneSourceToStereo.dsp +12 -0
- cyfaust/resources/libraries/examples/analysis/FFT.dsp +26 -0
- cyfaust/resources/libraries/examples/analysis/dbmeter.dsp +19 -0
- cyfaust/resources/libraries/examples/analysis/spectralLevel.dsp +8 -0
- cyfaust/resources/libraries/examples/analysis/spectralTiltLab.dsp +20 -0
- cyfaust/resources/libraries/examples/analysis/vumeter.dsp +18 -0
- cyfaust/resources/libraries/examples/autodiff/delay/diff.dsp +2 -0
- cyfaust/resources/libraries/examples/autodiff/delay/gt.dsp +2 -0
- cyfaust/resources/libraries/examples/autodiff/gain/diff.dsp +7 -0
- cyfaust/resources/libraries/examples/autodiff/gain/gt.dsp +1 -0
- cyfaust/resources/libraries/examples/autodiff/gain_dc/diff.dsp +7 -0
- cyfaust/resources/libraries/examples/autodiff/gain_dc/gt.dsp +4 -0
- cyfaust/resources/libraries/examples/autodiff/gain_exp/diff.dsp +9 -0
- cyfaust/resources/libraries/examples/autodiff/gain_exp/gt.dsp +1 -0
- cyfaust/resources/libraries/examples/autodiff/gain_pow/diff.dsp +9 -0
- cyfaust/resources/libraries/examples/autodiff/gain_pow/gt.dsp +1 -0
- cyfaust/resources/libraries/examples/autodiff/gain_pow_trig/diff.dsp +12 -0
- cyfaust/resources/libraries/examples/autodiff/gain_pow_trig/gt.dsp +1 -0
- cyfaust/resources/libraries/examples/autodiff/gain_sq/diff.dsp +7 -0
- cyfaust/resources/libraries/examples/autodiff/gain_sq/gt.dsp +1 -0
- cyfaust/resources/libraries/examples/autodiff/mem/diff.dsp +1 -0
- cyfaust/resources/libraries/examples/autodiff/mem/gt.dsp +1 -0
- cyfaust/resources/libraries/examples/autodiff/noise.dsp +2 -0
- cyfaust/resources/libraries/examples/autodiff/noop.dsp +2 -0
- cyfaust/resources/libraries/examples/autodiff/one_zero/diff.dsp +2 -0
- cyfaust/resources/libraries/examples/autodiff/one_zero/gt.dsp +2 -0
- cyfaust/resources/libraries/examples/autodiff/ramp.dsp +1 -0
- cyfaust/resources/libraries/examples/autodiff/recursion/diff.dsp +2 -0
- cyfaust/resources/libraries/examples/autodiff/recursion/gt.dsp +1 -0
- cyfaust/resources/libraries/examples/autodiff/recursion/target.dsp +13 -0
- cyfaust/resources/libraries/examples/autodiff/tremolo/diff.dsp +14 -0
- cyfaust/resources/libraries/examples/autodiff/tremolo/diffable.lib +7 -0
- cyfaust/resources/libraries/examples/autodiff/tremolo/gt.dsp +11 -0
- cyfaust/resources/libraries/examples/delayEcho/echo.dsp +15 -0
- cyfaust/resources/libraries/examples/delayEcho/quadEcho.dsp +21 -0
- cyfaust/resources/libraries/examples/delayEcho/smoothDelay.dsp +26 -0
- cyfaust/resources/libraries/examples/delayEcho/stereoEcho.dsp +16 -0
- cyfaust/resources/libraries/examples/delayEcho/tapiir.dsp +44 -0
- cyfaust/resources/libraries/examples/dynamic/compressor.dsp +8 -0
- cyfaust/resources/libraries/examples/dynamic/distortion.dsp +8 -0
- cyfaust/resources/libraries/examples/dynamic/gateCompressor.dsp +10 -0
- cyfaust/resources/libraries/examples/dynamic/noiseGate.dsp +8 -0
- cyfaust/resources/libraries/examples/dynamic/volume.dsp +15 -0
- cyfaust/resources/libraries/examples/filtering/APF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/BPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/DNN.dsp +25 -0
- cyfaust/resources/libraries/examples/filtering/HPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/LPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/bandFilter.dsp +44 -0
- cyfaust/resources/libraries/examples/filtering/cryBaby.dsp +4 -0
- cyfaust/resources/libraries/examples/filtering/diodeLadder.dsp +12 -0
- cyfaust/resources/libraries/examples/filtering/filterBank.dsp +6 -0
- cyfaust/resources/libraries/examples/filtering/graphicEqLab.dsp +10 -0
- cyfaust/resources/libraries/examples/filtering/highShelf.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/korg35HPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/korg35LPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/lfBoost.dsp +40 -0
- cyfaust/resources/libraries/examples/filtering/lowBoost.dsp +40 -0
- cyfaust/resources/libraries/examples/filtering/lowCut.dsp +40 -0
- cyfaust/resources/libraries/examples/filtering/lowShelf.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/moogHalfLadder.dsp +12 -0
- cyfaust/resources/libraries/examples/filtering/moogLadder.dsp +12 -0
- cyfaust/resources/libraries/examples/filtering/moogVCF.dsp +6 -0
- cyfaust/resources/libraries/examples/filtering/multibandFilter.dsp +14 -0
- cyfaust/resources/libraries/examples/filtering/notch.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/oberheim.dsp +14 -0
- cyfaust/resources/libraries/examples/filtering/oberheimBPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/oberheimBSF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/oberheimHPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/oberheimLPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/parametricEqLab.dsp +10 -0
- cyfaust/resources/libraries/examples/filtering/parametricEqualizer.dsp +6 -0
- cyfaust/resources/libraries/examples/filtering/peakNotch.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/peakingEQ.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/sallenKey2ndOrder.dsp +14 -0
- cyfaust/resources/libraries/examples/filtering/sallenKey2ndOrderBPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/sallenKey2ndOrderHPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/sallenKey2ndOrderLPF.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/sallenKeyOnePole.dsp +13 -0
- cyfaust/resources/libraries/examples/filtering/sallenKeyOnePoleHPF.dsp +12 -0
- cyfaust/resources/libraries/examples/filtering/sallenKeyOnePoleLPF.dsp +12 -0
- cyfaust/resources/libraries/examples/filtering/spectralTilt.dsp +8 -0
- cyfaust/resources/libraries/examples/filtering/vcfWahLab.dsp +12 -0
- cyfaust/resources/libraries/examples/filtering/vocoder.dsp +8 -0
- cyfaust/resources/libraries/examples/filtering/wahPedal.dsp +6 -0
- cyfaust/resources/libraries/examples/gameaudio/bubble.dsp +42 -0
- cyfaust/resources/libraries/examples/gameaudio/door.dsp +58 -0
- cyfaust/resources/libraries/examples/gameaudio/fire.dsp +46 -0
- cyfaust/resources/libraries/examples/gameaudio/insects.dsp +148 -0
- cyfaust/resources/libraries/examples/gameaudio/rain.dsp +27 -0
- cyfaust/resources/libraries/examples/gameaudio/wind.dsp +23 -0
- cyfaust/resources/libraries/examples/generator/filterOsc.dsp +8 -0
- cyfaust/resources/libraries/examples/generator/noise.dsp +52 -0
- cyfaust/resources/libraries/examples/generator/noiseMetadata.dsp +74 -0
- cyfaust/resources/libraries/examples/generator/osc.dsp +17 -0
- cyfaust/resources/libraries/examples/generator/osci.dsp +17 -0
- cyfaust/resources/libraries/examples/generator/sawtoothLab.dsp +8 -0
- cyfaust/resources/libraries/examples/generator/virtualAnalog.dsp +8 -0
- cyfaust/resources/libraries/examples/generator/virtualAnalogLab.dsp +10 -0
- cyfaust/resources/libraries/examples/misc/UITester.dsp +71 -0
- cyfaust/resources/libraries/examples/misc/autopan.dsp +59 -0
- cyfaust/resources/libraries/examples/misc/capture.dsp +24 -0
- cyfaust/resources/libraries/examples/misc/drumkit.dsp +36 -0
- cyfaust/resources/libraries/examples/misc/guitarix.dsp +184 -0
- cyfaust/resources/libraries/examples/misc/matrix.dsp +17 -0
- cyfaust/resources/libraries/examples/misc/midiTester.dsp +122 -0
- cyfaust/resources/libraries/examples/misc/mixer.dsp +27 -0
- cyfaust/resources/libraries/examples/misc/statespace.dsp +39 -0
- cyfaust/resources/libraries/examples/misc/switcher.dsp +20 -0
- cyfaust/resources/libraries/examples/misc/tester.dsp +32 -0
- cyfaust/resources/libraries/examples/misc/tester2.dsp +31 -0
- cyfaust/resources/libraries/examples/old/README.md +5 -0
- cyfaust/resources/libraries/examples/old/freeverb.dsp +109 -0
- cyfaust/resources/libraries/examples/old/rewriting/Makefile +21 -0
- cyfaust/resources/libraries/examples/old/rewriting/fact.dsp +3 -0
- cyfaust/resources/libraries/examples/old/rewriting/fold.dsp +61 -0
- cyfaust/resources/libraries/examples/old/rewriting/mesh.dsp +43 -0
- cyfaust/resources/libraries/examples/old/rewriting/mesh.pd +37 -0
- cyfaust/resources/libraries/examples/old/rewriting/sample.pd +12 -0
- cyfaust/resources/libraries/examples/old/rewriting/serial.dsp +7 -0
- cyfaust/resources/libraries/examples/old/rewriting/sum.dsp +55 -0
- cyfaust/resources/libraries/examples/old/rewriting/test.pd +48 -0
- cyfaust/resources/libraries/examples/phasing/flanger.dsp +8 -0
- cyfaust/resources/libraries/examples/phasing/phaser.dsp +8 -0
- cyfaust/resources/libraries/examples/phasing/phaserFlangerLab.dsp +12 -0
- cyfaust/resources/libraries/examples/physicalModeling/brass.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/brassMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/churchBell.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/clarinet.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/clarinetMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/djembeMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/elecGuitarMIDI.dsp +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/englishBell.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/NLFeks.dsp +91 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/NLFfm.dsp +70 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/README +125 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/bass.dsp +84 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/bass.h +91 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/blowBottle.dsp +102 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/bowed.dsp +114 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/brass.dsp +103 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/clarinet.dsp +110 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/flute.dsp +116 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/fluteStk.dsp +121 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/glassHarmonica.dsp +131 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/harpsi.dsp +90 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/harpsichord.h +185 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/instrument.h +114 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/modalBar.dsp +122 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/modalBar.h +48 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/audio-out.pd +33 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/bottle.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/clarinets.pd +15 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/audio-out.pd +33 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/bass.pd +162 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/canon.pd +55 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/flute.pd +343 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/pachelbel.mid +0 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/audio-out.pd +33 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/daisy.mid +0 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/daisy.pd +45 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/piano.pd +205 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/voiceForm.pd +340 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/audio-out.pd +33 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/blowHole.pd +330 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/piano.pd +205 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/take5.mid +0 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/take5.pd +45 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/turkish-march/audio-out.pd +33 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/turkish-march/harpsi.pd +204 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/turkish-march/turkish-march.mid +0 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/turkish-march/turkish-march.pd +31 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/audio-out.pd +33 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/bass.pd +162 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/modalBar.pd +258 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/piano.pd +205 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/what-a-friend.pd +52 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/what_a_friend.mid +0 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/flutes.pd +15 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fm.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/glassBare.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/harpsichord-poly.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/ironBare.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/midi-in.pd +111 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/modal.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/osc.pd +26 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/piano-poly.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/plucked.pd +20 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/saxophone.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/tibetan.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/trumpet.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/violin.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/voiceSynth.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/woodenBare.pd +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/phonemes.h +189 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/piano.dsp +255 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/piano.h +751 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/saxophony.dsp +114 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/sitar.dsp +48 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/tibetanBowl.dsp +155 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/tunedBar.dsp +123 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/uniBar.dsp +100 -0
- cyfaust/resources/libraries/examples/physicalModeling/faust-stk/voiceForm.dsp +125 -0
- cyfaust/resources/libraries/examples/physicalModeling/fds/1dDampedWaveEquation.dsp +43 -0
- cyfaust/resources/libraries/examples/physicalModeling/fds/2dKirchhoffThinPlate.dsp +75 -0
- cyfaust/resources/libraries/examples/physicalModeling/fds/BowedString.dsp +61 -0
- cyfaust/resources/libraries/examples/physicalModeling/fds/ControllableNonPhysicalString.dsp +72 -0
- cyfaust/resources/libraries/examples/physicalModeling/fds/HammeredString.dsp +74 -0
- cyfaust/resources/libraries/examples/physicalModeling/fds/PianoHammeredString.dsp +85 -0
- cyfaust/resources/libraries/examples/physicalModeling/fds/StiffString.dsp +54 -0
- cyfaust/resources/libraries/examples/physicalModeling/flute.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/fluteMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/frenchBell.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/germanBell.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/guitarMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/karplus.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/marimbaMIDI.dsp +10 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/00_BasicOscillator/harmonicOscillator.dsp +58 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/00_BasicOscillator/harmonicOscillator2.dsp +62 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/00_BasicOscillator/harmonicOscillator3.dsp +65 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/01_ParamControl/paramOsc.dsp +63 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/02_AudioParamControl/audioParamOsc.dsp +63 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/03_HammerTime/hammerOsc.dsp +71 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/04_Gravity/bouncingOsc.dsp +64 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/05_PluckedOscillator/pluckedOsc.dsp +57 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/06_BowedOscillator/bowedOsc.dsp +65 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/07_NonLinearOscillator/nlOsc.dsp +78 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/08_TwoMassChain/2massChain.dsp +75 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/09_TinyString/tinyString.dsp +101 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/10_PluckedString/pluckedString.dsp +678 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/11_BowedString/bowedString.dsp +671 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/12_TriangleMesh/triangleMesh.dsp +448 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/13_Construction/construction.dsp +1036 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/14_Polyphonic/polyTriangle.dsp +79 -0
- cyfaust/resources/libraries/examples/physicalModeling/mi-faust/15_PhysicalLFO/physicalLFO.dsp +107 -0
- cyfaust/resources/libraries/examples/physicalModeling/modularInterpInstrMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/nylonGuitarMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/old/harpe.dsp +45 -0
- cyfaust/resources/libraries/examples/physicalModeling/old/karplus.dsp +34 -0
- cyfaust/resources/libraries/examples/physicalModeling/old/karplus32.dsp +47 -0
- cyfaust/resources/libraries/examples/physicalModeling/russianBell.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/standardBell.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/violin.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/violinMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/vocalBP.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/vocalBPMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/vocalFOF.dsp +8 -0
- cyfaust/resources/libraries/examples/physicalModeling/vocalFOFMIDI.dsp +8 -0
- cyfaust/resources/libraries/examples/pitchShifting/pitchShifter.dsp +20 -0
- cyfaust/resources/libraries/examples/psychoacoustic/harmonicExciter.dsp +10 -0
- cyfaust/resources/libraries/examples/quantizing/quantizedChords.dsp +49 -0
- cyfaust/resources/libraries/examples/reverb/dattorro.dsp +8 -0
- cyfaust/resources/libraries/examples/reverb/fdnRev.dsp +8 -0
- cyfaust/resources/libraries/examples/reverb/freeverb.dsp +8 -0
- cyfaust/resources/libraries/examples/reverb/greyhole.dsp +8 -0
- cyfaust/resources/libraries/examples/reverb/jprev.dsp +8 -0
- cyfaust/resources/libraries/examples/reverb/reverbDesigner.dsp +12 -0
- cyfaust/resources/libraries/examples/reverb/reverbTester.dsp +8 -0
- cyfaust/resources/libraries/examples/reverb/zitaRev.dsp +8 -0
- cyfaust/resources/libraries/examples/reverb/zitaRevFDN.dsp +8 -0
- cyfaust/resources/libraries/examples/smartKeyboard/acGuitar.dsp +100 -0
- cyfaust/resources/libraries/examples/smartKeyboard/associatedEffects/elecGuitarEffect.dsp +8 -0
- cyfaust/resources/libraries/examples/smartKeyboard/associatedEffects/myEffect.dsp +5 -0
- cyfaust/resources/libraries/examples/smartKeyboard/associatedEffects/reverb.dsp +5 -0
- cyfaust/resources/libraries/examples/smartKeyboard/bells.dsp +80 -0
- cyfaust/resources/libraries/examples/smartKeyboard/bowed.dsp +87 -0
- cyfaust/resources/libraries/examples/smartKeyboard/brass.dsp +82 -0
- cyfaust/resources/libraries/examples/smartKeyboard/clarinet.dsp +113 -0
- cyfaust/resources/libraries/examples/smartKeyboard/crazyGuiro.dsp +96 -0
- cyfaust/resources/libraries/examples/smartKeyboard/drums.dsp +74 -0
- cyfaust/resources/libraries/examples/smartKeyboard/dubDub.dsp +87 -0
- cyfaust/resources/libraries/examples/smartKeyboard/elecGuitar.dsp +67 -0
- cyfaust/resources/libraries/examples/smartKeyboard/fm.dsp +78 -0
- cyfaust/resources/libraries/examples/smartKeyboard/frog.dsp +74 -0
- cyfaust/resources/libraries/examples/smartKeyboard/harp.dsp +84 -0
- cyfaust/resources/libraries/examples/smartKeyboard/midiOnly.dsp +62 -0
- cyfaust/resources/libraries/examples/smartKeyboard/multiSynth.dsp +75 -0
- cyfaust/resources/libraries/examples/smartKeyboard/toy.dsp +71 -0
- cyfaust/resources/libraries/examples/smartKeyboard/trumpet.dsp +59 -0
- cyfaust/resources/libraries/examples/smartKeyboard/turenas.dsp +114 -0
- cyfaust/resources/libraries/examples/smartKeyboard/violin.dsp +91 -0
- cyfaust/resources/libraries/examples/smartKeyboard/violin2.dsp +84 -0
- cyfaust/resources/libraries/examples/smartKeyboard/vocal.dsp +43 -0
- cyfaust/resources/libraries/examples/spat/panpot.dsp +17 -0
- cyfaust/resources/libraries/examples/spat/spat.dsp +25 -0
- cyfaust/resources/libraries/fds.lib +535 -0
- cyfaust/resources/libraries/filter.lib +1710 -0
- cyfaust/resources/libraries/filters.lib +3125 -0
- cyfaust/resources/libraries/hoa.lib +1081 -0
- cyfaust/resources/libraries/instruments.lib +263 -0
- cyfaust/resources/libraries/interpolators.lib +675 -0
- cyfaust/resources/libraries/math.lib +602 -0
- cyfaust/resources/libraries/maths.lib +798 -0
- cyfaust/resources/libraries/maxmsp.lib +237 -0
- cyfaust/resources/libraries/mi.lib +528 -0
- cyfaust/resources/libraries/misceffects.lib +998 -0
- cyfaust/resources/libraries/music.lib +496 -0
- cyfaust/resources/libraries/noises.lib +487 -0
- cyfaust/resources/libraries/oscillator.lib +450 -0
- cyfaust/resources/libraries/oscillators.lib +1838 -0
- cyfaust/resources/libraries/phaflangers.lib +235 -0
- cyfaust/resources/libraries/physmodels.lib +3990 -0
- cyfaust/resources/libraries/platform.lib +59 -0
- cyfaust/resources/libraries/quantizers.lib +310 -0
- cyfaust/resources/libraries/reducemaps.lib +235 -0
- cyfaust/resources/libraries/reverbs.lib +686 -0
- cyfaust/resources/libraries/routes.lib +262 -0
- cyfaust/resources/libraries/sf.lib +53 -0
- cyfaust/resources/libraries/signals.lib +570 -0
- cyfaust/resources/libraries/soundfiles.lib +234 -0
- cyfaust/resources/libraries/spats.lib +173 -0
- cyfaust/resources/libraries/stdfaust.lib +38 -0
- cyfaust/resources/libraries/synths.lib +322 -0
- cyfaust/resources/libraries/tonestacks.lib +427 -0
- cyfaust/resources/libraries/tubes.lib +5039 -0
- cyfaust/resources/libraries/vaeffects.lib +984 -0
- cyfaust/resources/libraries/version.lib +22 -0
- cyfaust/resources/libraries/wdmodels.lib +2276 -0
- cyfaust/resources/libraries/webaudio.lib +402 -0
- cyfaust/signal.pxd +44 -0
- cyfaust/signal.pyx +1993 -0
- cyfaust-0.1.0.dist-info/METADATA +355 -0
- cyfaust-0.1.0.dist-info/RECORD +693 -0
- cyfaust-0.1.0.dist-info/WHEEL +5 -0
- cyfaust-0.1.0.dist-info/entry_points.txt +3 -0
- 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
|
+
};
|