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,1891 @@
|
|
|
1
|
+
/************************** BEGIN QTUI.h *****************************
|
|
2
|
+
FAUST Architecture File
|
|
3
|
+
Copyright (C) 2003-2022 GRAME, Centre National de Creation Musicale
|
|
4
|
+
---------------------------------------------------------------------
|
|
5
|
+
This program is free software; you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
the Free Software Foundation; either version 2.1 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with this program; if not, write to the Free Software
|
|
17
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
18
|
+
|
|
19
|
+
EXCEPTION : As a special exception, you may create a larger work
|
|
20
|
+
that contains this FAUST architecture section and distribute
|
|
21
|
+
that work under terms of your choice, so long as this FAUST
|
|
22
|
+
architecture section is not modified.
|
|
23
|
+
************************************************************************/
|
|
24
|
+
|
|
25
|
+
#ifndef __QTUI__
|
|
26
|
+
#define __QTUI__
|
|
27
|
+
|
|
28
|
+
#include <cassert>
|
|
29
|
+
#include <cmath>
|
|
30
|
+
#include <fstream>
|
|
31
|
+
#include <iostream>
|
|
32
|
+
#include <list>
|
|
33
|
+
#include <map>
|
|
34
|
+
#include <set>
|
|
35
|
+
#include <vector>
|
|
36
|
+
#include <stack>
|
|
37
|
+
|
|
38
|
+
#if defined(HTTPCTRL) && defined(QRCODECTRL)
|
|
39
|
+
|
|
40
|
+
#ifdef _WIN32
|
|
41
|
+
# include <winsock2.h>
|
|
42
|
+
# undef min
|
|
43
|
+
# undef max
|
|
44
|
+
# pragma warning (disable: 4100)
|
|
45
|
+
#else
|
|
46
|
+
# include <netdb.h>
|
|
47
|
+
# include <arpa/inet.h>
|
|
48
|
+
# include <unistd.h>
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
#include <QtNetwork>
|
|
52
|
+
|
|
53
|
+
#endif
|
|
54
|
+
|
|
55
|
+
#include <QtGlobal>
|
|
56
|
+
#include <QtGui>
|
|
57
|
+
#if QT_VERSION >= 0x050000
|
|
58
|
+
#include <QtWidgets>
|
|
59
|
+
#endif
|
|
60
|
+
#if QT_VERSION >= 0x060000
|
|
61
|
+
#define QTSetMargins(a) setContentsMargins(a, a, a, a)
|
|
62
|
+
#else
|
|
63
|
+
#define QTSetMargins(a) setMargin(a)
|
|
64
|
+
#endif
|
|
65
|
+
#include <QApplication>
|
|
66
|
+
#include <QLabel>
|
|
67
|
+
#include <QComboBox>
|
|
68
|
+
#include <QHBoxLayout>
|
|
69
|
+
#include <QVBoxLayout>
|
|
70
|
+
#include <sstream>
|
|
71
|
+
|
|
72
|
+
#include "faust/gui/GUI.h"
|
|
73
|
+
#include "faust/gui/ValueConverter.h"
|
|
74
|
+
#include "faust/gui/SimpleParser.h"
|
|
75
|
+
#include "faust/gui/MetaDataUI.h"
|
|
76
|
+
|
|
77
|
+
#if defined(HTTPCTRL) && defined(QRCODECTRL)
|
|
78
|
+
#include "faust/gui/qrcodegen.h"
|
|
79
|
+
#endif
|
|
80
|
+
|
|
81
|
+
#if QT_VERSION >= 0x040300
|
|
82
|
+
#define QTColorLighter lighter
|
|
83
|
+
#define QTColorDarker darker
|
|
84
|
+
#else
|
|
85
|
+
#define QTColorLighter light
|
|
86
|
+
#define QTColorDarker dark
|
|
87
|
+
#endif
|
|
88
|
+
|
|
89
|
+
// for compatibility
|
|
90
|
+
#define minValue minimum
|
|
91
|
+
#define maxValue maximum
|
|
92
|
+
|
|
93
|
+
//==============================BEGIN QSYNTHKNOB=====================================
|
|
94
|
+
//
|
|
95
|
+
// qsynthknob and qsynthDialVokiStyle borrowed from qsynth-0.3.3 by Rui Nuno Capela
|
|
96
|
+
// This widget is based on a design by Thorsten Wilms,
|
|
97
|
+
// implemented by Chris Cannam in Rosegarden,
|
|
98
|
+
// adapted for QSynth by Pedro Lopez-Cabanillas,
|
|
99
|
+
// improved for Qt4 by David Garcia Garzon.
|
|
100
|
+
//
|
|
101
|
+
|
|
102
|
+
#define DIAL_MIN (0.25 * M_PI)
|
|
103
|
+
#define DIAL_MAX (1.75 * M_PI)
|
|
104
|
+
#define DIAL_RANGE (DIAL_MAX - DIAL_MIN)
|
|
105
|
+
#define DIAL_WRAPPING false
|
|
106
|
+
|
|
107
|
+
class qsynthDialVokiStyle : public QCommonStyle
|
|
108
|
+
{
|
|
109
|
+
|
|
110
|
+
public:
|
|
111
|
+
qsynthDialVokiStyle() {}
|
|
112
|
+
virtual ~qsynthDialVokiStyle() {}
|
|
113
|
+
|
|
114
|
+
virtual void drawComplexControl(ComplexControl cc, const QStyleOptionComplex* opt, QPainter* p, const QWidget* widget = NULL) const
|
|
115
|
+
{
|
|
116
|
+
if (cc != QStyle::CC_Dial) {
|
|
117
|
+
QCommonStyle::drawComplexControl(cc, opt, p, widget);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const QStyleOptionSlider* dial = qstyleoption_cast<const QStyleOptionSlider*>(opt);
|
|
122
|
+
if (dial == NULL) return;
|
|
123
|
+
|
|
124
|
+
double angle = DIAL_MIN // offset
|
|
125
|
+
+ (DIAL_RANGE *
|
|
126
|
+
(double(dial->sliderValue - dial->minimum) /
|
|
127
|
+
(double(dial->maximum - dial->minimum))));
|
|
128
|
+
int degrees = int(angle * 180.0 / M_PI);
|
|
129
|
+
int side = dial->rect.width() < dial->rect.height() ? dial->rect.width() : dial->rect.height();
|
|
130
|
+
int xcenter = dial->rect.width() / 2;
|
|
131
|
+
int ycenter = dial->rect.height() / 2;
|
|
132
|
+
int notchWidth = 1 + side / 400;
|
|
133
|
+
int pointerWidth = 2 + side / 30;
|
|
134
|
+
int scaleShadowWidth = 1 + side / 100;
|
|
135
|
+
int knobBorderWidth = 0;
|
|
136
|
+
int ns = dial->tickInterval;
|
|
137
|
+
int numTicks = 1 + (dial->maximum + ns - dial->minimum) / ns;
|
|
138
|
+
int indent = int(0.15 * side) + 2;
|
|
139
|
+
int knobWidth = side - 2 * indent;
|
|
140
|
+
int shineFocus = knobWidth / 4;
|
|
141
|
+
int shineCenter = knobWidth / 5;
|
|
142
|
+
int shineExtension = shineCenter * 4;
|
|
143
|
+
int shadowShift = shineCenter * 2;
|
|
144
|
+
int meterWidth = side - 2 * scaleShadowWidth;
|
|
145
|
+
|
|
146
|
+
QPalette pal = opt->palette;
|
|
147
|
+
QColor knobColor = pal.mid().color();
|
|
148
|
+
QColor borderColor = knobColor.QTColorLighter();
|
|
149
|
+
QColor meterColor = (dial->state & State_Enabled) ?
|
|
150
|
+
QColor("orange") : pal.mid().color();
|
|
151
|
+
// pal.highlight().color() : pal.mid().color();
|
|
152
|
+
QColor background = pal.window().color();
|
|
153
|
+
|
|
154
|
+
p->save();
|
|
155
|
+
p->setRenderHint(QPainter::Antialiasing, true);
|
|
156
|
+
|
|
157
|
+
// The bright metering bit...
|
|
158
|
+
QConicalGradient meterShadow(xcenter, ycenter, -90);
|
|
159
|
+
meterShadow.setColorAt(0, meterColor.QTColorDarker());
|
|
160
|
+
meterShadow.setColorAt(0.5, meterColor);
|
|
161
|
+
meterShadow.setColorAt(1.0, meterColor.QTColorLighter().QTColorLighter());
|
|
162
|
+
p->setBrush(meterShadow);
|
|
163
|
+
p->setPen(Qt::transparent);
|
|
164
|
+
p->drawPie(xcenter - meterWidth / 2, ycenter - meterWidth / 2,
|
|
165
|
+
meterWidth, meterWidth, (180 + 45) * 16, -(degrees - 45) * 16);
|
|
166
|
+
|
|
167
|
+
// Knob projected shadow
|
|
168
|
+
QRadialGradient projectionGradient(xcenter + shineCenter, ycenter + shineCenter,
|
|
169
|
+
shineExtension, xcenter + shadowShift, ycenter + shadowShift);
|
|
170
|
+
projectionGradient.setColorAt(0, QColor( 0, 0, 0, 100));
|
|
171
|
+
projectionGradient.setColorAt(1, QColor(200, 0, 0, 10));
|
|
172
|
+
QBrush shadowBrush(projectionGradient);
|
|
173
|
+
p->setBrush(shadowBrush);
|
|
174
|
+
p->drawEllipse(xcenter - shadowShift, ycenter - shadowShift,
|
|
175
|
+
knobWidth, knobWidth);
|
|
176
|
+
|
|
177
|
+
// Knob body and face...
|
|
178
|
+
QPen pen;
|
|
179
|
+
pen.setColor(knobColor);
|
|
180
|
+
pen.setWidth(knobBorderWidth);
|
|
181
|
+
p->setPen(pen);
|
|
182
|
+
|
|
183
|
+
QRadialGradient gradient(xcenter - shineCenter, ycenter - shineCenter,
|
|
184
|
+
shineExtension, xcenter - shineFocus, ycenter - shineFocus);
|
|
185
|
+
gradient.setColorAt(0.2, knobColor.QTColorLighter().QTColorLighter());
|
|
186
|
+
gradient.setColorAt(0.5, knobColor);
|
|
187
|
+
gradient.setColorAt(1.0, knobColor.QTColorDarker(150));
|
|
188
|
+
QBrush knobBrush(gradient);
|
|
189
|
+
p->setBrush(knobBrush);
|
|
190
|
+
p->drawEllipse(xcenter - knobWidth / 2, ycenter - knobWidth / 2,
|
|
191
|
+
knobWidth, knobWidth);
|
|
192
|
+
|
|
193
|
+
// Tick notches...
|
|
194
|
+
p->setBrush(Qt::NoBrush);
|
|
195
|
+
|
|
196
|
+
if (dial->subControls & QStyle::SC_DialTickmarks) {
|
|
197
|
+
pen.setColor(pal.dark().color());
|
|
198
|
+
pen.setWidth(notchWidth);
|
|
199
|
+
p->setPen(pen);
|
|
200
|
+
double hyp = double(side - scaleShadowWidth) / 2.0;
|
|
201
|
+
double len = hyp / 4;
|
|
202
|
+
for (int i = 0; i < numTicks; ++i) {
|
|
203
|
+
int div = numTicks;
|
|
204
|
+
if (div > 1) --div;
|
|
205
|
+
bool internal = (i != 0 && i != numTicks - 1);
|
|
206
|
+
double angle = DIAL_MIN
|
|
207
|
+
+ (DIAL_MAX - DIAL_MIN) * i / div;
|
|
208
|
+
double dir = (internal ? -1 : len);
|
|
209
|
+
double sinAngle = sin(angle);
|
|
210
|
+
double cosAngle = cos(angle);
|
|
211
|
+
double x0 = xcenter - (hyp - len) * sinAngle;
|
|
212
|
+
double y0 = ycenter + (hyp - len) * cosAngle;
|
|
213
|
+
double x1 = xcenter - (hyp + dir) * sinAngle;
|
|
214
|
+
double y1 = ycenter + (hyp + dir) * cosAngle;
|
|
215
|
+
p->drawLine(QLineF(x0, y0, x1, y1));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Shadowing...
|
|
220
|
+
|
|
221
|
+
// Knob shadow...
|
|
222
|
+
if (knobBorderWidth > 0) {
|
|
223
|
+
QLinearGradient inShadow(xcenter - side / 4, ycenter - side / 4,
|
|
224
|
+
xcenter + side / 4, ycenter + side / 4);
|
|
225
|
+
inShadow.setColorAt(0.0, borderColor.QTColorLighter());
|
|
226
|
+
inShadow.setColorAt(1.0, borderColor.QTColorDarker());
|
|
227
|
+
p->setPen(QPen(QBrush(inShadow), knobBorderWidth * 7 / 8));
|
|
228
|
+
p->drawEllipse(xcenter - side / 2 + indent,
|
|
229
|
+
ycenter - side / 2 + indent,
|
|
230
|
+
side - 2 * indent, side - 2 * indent);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Scale shadow...
|
|
234
|
+
QLinearGradient outShadow(xcenter - side / 3, ycenter - side / 3,
|
|
235
|
+
xcenter + side / 3, ycenter + side / 3);
|
|
236
|
+
outShadow.setColorAt(0.0, background.QTColorDarker().QTColorDarker());
|
|
237
|
+
outShadow.setColorAt(1.0, background.QTColorLighter().QTColorLighter());
|
|
238
|
+
p->setPen(QPen(QBrush(outShadow), scaleShadowWidth));
|
|
239
|
+
p->drawArc(xcenter - side / 2 + scaleShadowWidth / 2,
|
|
240
|
+
ycenter - side / 2 + scaleShadowWidth / 2,
|
|
241
|
+
side - scaleShadowWidth, side - scaleShadowWidth, -45 * 16, 270 * 16);
|
|
242
|
+
|
|
243
|
+
// Pointer notch...
|
|
244
|
+
double hyp = double(side) / 2.0;
|
|
245
|
+
double len = hyp - indent - 1;
|
|
246
|
+
|
|
247
|
+
double x = xcenter - len * sin(angle);
|
|
248
|
+
double y = ycenter + len * cos(angle);
|
|
249
|
+
|
|
250
|
+
QColor pointerColor = pal.dark().color();
|
|
251
|
+
pen.setColor((dial->state & State_Enabled) ? pointerColor.QTColorDarker(140) : pointerColor);
|
|
252
|
+
pen.setWidth(pointerWidth + 2);
|
|
253
|
+
p->setPen(pen);
|
|
254
|
+
p->drawLine(QLineF(xcenter, ycenter, x, y));
|
|
255
|
+
pen.setColor((dial->state & State_Enabled) ? pointerColor.QTColorLighter() : pointerColor.QTColorLighter(140));
|
|
256
|
+
pen.setWidth(pointerWidth);
|
|
257
|
+
p->setPen(pen);
|
|
258
|
+
p->drawLine(QLineF(xcenter - 1, ycenter - 1, x - 1, y - 1));
|
|
259
|
+
|
|
260
|
+
// done
|
|
261
|
+
p->restore();
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
//===============================END QSYNTHKNOB======================================
|
|
267
|
+
|
|
268
|
+
//==============================BEGIN DISPLAYS===================================
|
|
269
|
+
//
|
|
270
|
+
// This section constains displays, passive QT widgets that displays values in
|
|
271
|
+
// different ways, in particular bargraphs
|
|
272
|
+
//
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* An abstract widget that display a value in a range
|
|
276
|
+
*/
|
|
277
|
+
class AbstractDisplay : public QWidget
|
|
278
|
+
{
|
|
279
|
+
|
|
280
|
+
protected:
|
|
281
|
+
|
|
282
|
+
FAUSTFLOAT fMin;
|
|
283
|
+
FAUSTFLOAT fMax;
|
|
284
|
+
FAUSTFLOAT fValue;
|
|
285
|
+
|
|
286
|
+
public:
|
|
287
|
+
|
|
288
|
+
AbstractDisplay(FAUSTFLOAT lo, FAUSTFLOAT hi) : fMin(lo), fMax(hi), fValue(lo)
|
|
289
|
+
{}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* set the range of displayed values
|
|
293
|
+
*/
|
|
294
|
+
virtual void setRange(FAUSTFLOAT lo, FAUSTFLOAT hi)
|
|
295
|
+
{
|
|
296
|
+
fMin = lo;
|
|
297
|
+
fMax = hi;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* set the value to be displayed
|
|
302
|
+
*/
|
|
303
|
+
virtual void setValue(FAUSTFLOAT v)
|
|
304
|
+
{
|
|
305
|
+
if (v < fMin) v = fMin;
|
|
306
|
+
else if (v > fMax) v = fMax;
|
|
307
|
+
|
|
308
|
+
if (v != fValue) {
|
|
309
|
+
fValue = v;
|
|
310
|
+
update();
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Displays dB values using a scale of colors
|
|
317
|
+
*/
|
|
318
|
+
class dbAbstractDisplay : public AbstractDisplay
|
|
319
|
+
{
|
|
320
|
+
|
|
321
|
+
protected:
|
|
322
|
+
|
|
323
|
+
FAUSTFLOAT fScaleMin;
|
|
324
|
+
FAUSTFLOAT fScaleMax;
|
|
325
|
+
std::vector<int> fLevel;
|
|
326
|
+
std::vector<QBrush> fBrush;
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Create the scale of colors used to paint the bargraph in relation to the levels
|
|
330
|
+
* The parameter x indicates the direction of the gradient. x=1 means an horizontal
|
|
331
|
+
* gradient typically used by a vertical bargraph, and x=0 a vertical gradient.
|
|
332
|
+
*/
|
|
333
|
+
void initLevelsColors(int x)
|
|
334
|
+
{
|
|
335
|
+
int alpha = 200;
|
|
336
|
+
{ // level until -10 dB
|
|
337
|
+
QColor c(40, 160, 40, alpha);
|
|
338
|
+
QLinearGradient g(0,0,x,1-x);
|
|
339
|
+
g.setCoordinateMode(QGradient::ObjectBoundingMode);
|
|
340
|
+
g.setColorAt(0.0, c.lighter());
|
|
341
|
+
g.setColorAt(0.2, c);
|
|
342
|
+
g.setColorAt(0.8, c);
|
|
343
|
+
g.setColorAt(0.9, c.darker(120));
|
|
344
|
+
|
|
345
|
+
fLevel.push_back(-10);
|
|
346
|
+
fBrush.push_back(QBrush(g));
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
{ // level until -6 dB
|
|
350
|
+
QColor c(160, 220, 20, alpha);
|
|
351
|
+
QLinearGradient g(0,0,x,1-x);
|
|
352
|
+
g.setCoordinateMode(QGradient::ObjectBoundingMode);
|
|
353
|
+
g.setColorAt(0.0, c.lighter());
|
|
354
|
+
g.setColorAt(0.2, c);
|
|
355
|
+
g.setColorAt(0.8, c);
|
|
356
|
+
g.setColorAt(0.9, c.darker(120));
|
|
357
|
+
|
|
358
|
+
fLevel.push_back(-6);
|
|
359
|
+
fBrush.push_back(QBrush(g));
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
{ // level until -3 dB
|
|
363
|
+
QColor c(220, 220, 20, alpha);
|
|
364
|
+
QLinearGradient g(0,0,x,1-x);
|
|
365
|
+
g.setCoordinateMode(QGradient::ObjectBoundingMode);
|
|
366
|
+
g.setColorAt(0.0, c.lighter());
|
|
367
|
+
g.setColorAt(0.2, c);
|
|
368
|
+
g.setColorAt(0.8, c);
|
|
369
|
+
g.setColorAt(0.9, c.darker(120));
|
|
370
|
+
|
|
371
|
+
fLevel.push_back(-3);
|
|
372
|
+
fBrush.push_back(QBrush(g));
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
{ // level until -0 dB
|
|
376
|
+
QColor c(240, 160, 20, alpha);
|
|
377
|
+
QLinearGradient g(0,0,x,1-x);
|
|
378
|
+
g.setCoordinateMode(QGradient::ObjectBoundingMode);
|
|
379
|
+
g.setColorAt(0.0, c.lighter());
|
|
380
|
+
g.setColorAt(0.2, c);
|
|
381
|
+
g.setColorAt(0.8, c);
|
|
382
|
+
g.setColorAt(0.9, c.darker(120));
|
|
383
|
+
|
|
384
|
+
fLevel.push_back(0);
|
|
385
|
+
fBrush.push_back(QBrush(g));
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
{ // until 10 dB (and over because last one)
|
|
389
|
+
QColor c(240, 0, 20, alpha); // ColorOver
|
|
390
|
+
QLinearGradient g(0,0,x,1-x);
|
|
391
|
+
g.setCoordinateMode(QGradient::ObjectBoundingMode);
|
|
392
|
+
g.setColorAt(0.0, c.lighter());
|
|
393
|
+
g.setColorAt(0.2, c);
|
|
394
|
+
g.setColorAt(0.8, c);
|
|
395
|
+
g.setColorAt(0.9, c.darker(120));
|
|
396
|
+
|
|
397
|
+
fLevel.push_back(+10);
|
|
398
|
+
fBrush.push_back(QBrush(g));
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
public:
|
|
403
|
+
|
|
404
|
+
dbAbstractDisplay(FAUSTFLOAT lo, FAUSTFLOAT hi) : AbstractDisplay(lo, hi), fScaleMin(0), fScaleMax(0)
|
|
405
|
+
{}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* set the range of displayed values
|
|
409
|
+
*/
|
|
410
|
+
virtual void setRange(FAUSTFLOAT lo, FAUSTFLOAT hi)
|
|
411
|
+
{
|
|
412
|
+
AbstractDisplay::setRange(lo, hi);
|
|
413
|
+
fScaleMin = dB2Scale(fMin);
|
|
414
|
+
fScaleMax = dB2Scale(fMax);
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Small rectangular LED display which color changes with the level in dB
|
|
420
|
+
*/
|
|
421
|
+
class dbLED : public dbAbstractDisplay
|
|
422
|
+
{
|
|
423
|
+
|
|
424
|
+
protected:
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Draw the LED using a color depending of its value in dB
|
|
428
|
+
*/
|
|
429
|
+
virtual void paintEvent(QPaintEvent*)
|
|
430
|
+
{
|
|
431
|
+
QPainter painter(this);
|
|
432
|
+
painter.drawRect(rect());
|
|
433
|
+
|
|
434
|
+
if (fValue <= fLevel[0]) {
|
|
435
|
+
// interpolate the first color on the alpha channel
|
|
436
|
+
QColor c(40, 160, 40) ;
|
|
437
|
+
FAUSTFLOAT a = (fValue-fMin)/(fLevel[0]-fMin);
|
|
438
|
+
c.setAlphaF(a);
|
|
439
|
+
painter.fillRect(rect(), c);
|
|
440
|
+
|
|
441
|
+
} else {
|
|
442
|
+
// find the minimal level > value
|
|
443
|
+
size_t l = fLevel.size()-1; while (fValue < fLevel[l] && l > 0) l--;
|
|
444
|
+
painter.fillRect(rect(), fBrush[l]);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
public:
|
|
449
|
+
|
|
450
|
+
dbLED(FAUSTFLOAT lo, FAUSTFLOAT hi) : dbAbstractDisplay(lo,hi)
|
|
451
|
+
{
|
|
452
|
+
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
|
453
|
+
initLevelsColors(1);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
virtual QSize sizeHint() const
|
|
457
|
+
{
|
|
458
|
+
return QSize(16, 8);
|
|
459
|
+
}
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Small rectangular LED display which intensity (alpha channel) changes according to the value
|
|
464
|
+
*/
|
|
465
|
+
class LED : public AbstractDisplay
|
|
466
|
+
{
|
|
467
|
+
|
|
468
|
+
protected:
|
|
469
|
+
|
|
470
|
+
QColor fColor;
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Draw the LED using a transparency depending of its value
|
|
474
|
+
*/
|
|
475
|
+
virtual void paintEvent(QPaintEvent*)
|
|
476
|
+
{
|
|
477
|
+
QPainter painter(this);
|
|
478
|
+
painter.drawRect(rect());
|
|
479
|
+
// interpolate the first color on the alpha channel
|
|
480
|
+
QColor c = fColor ;
|
|
481
|
+
FAUSTFLOAT a = (fValue-fMin)/(fMax-fMin);
|
|
482
|
+
c.setAlphaF(a);
|
|
483
|
+
painter.fillRect(rect(), c);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
public:
|
|
487
|
+
|
|
488
|
+
LED(FAUSTFLOAT lo, FAUSTFLOAT hi) : AbstractDisplay(lo, hi), fColor("yellow")
|
|
489
|
+
{
|
|
490
|
+
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
virtual QSize sizeHint() const
|
|
494
|
+
{
|
|
495
|
+
return QSize(16, 8);
|
|
496
|
+
}
|
|
497
|
+
};
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* A simple bargraph that detect automatically its direction
|
|
501
|
+
*/
|
|
502
|
+
class linBargraph : public AbstractDisplay
|
|
503
|
+
{
|
|
504
|
+
|
|
505
|
+
protected:
|
|
506
|
+
|
|
507
|
+
QBrush fBrush;
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* No scale implemented yet
|
|
511
|
+
*/
|
|
512
|
+
void paintScale(QPainter* painter) const
|
|
513
|
+
{
|
|
514
|
+
painter->drawRect(0, 0, width(), height());
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* The length of the rectangle is proportional to the value
|
|
519
|
+
*/
|
|
520
|
+
void paintContent(QPainter* painter) const
|
|
521
|
+
{
|
|
522
|
+
int w = width();
|
|
523
|
+
int h = height();
|
|
524
|
+
FAUSTFLOAT v = (fValue-fMin)/(fMax-fMin);
|
|
525
|
+
|
|
526
|
+
if (h > w) {
|
|
527
|
+
// draw vertical rectangle
|
|
528
|
+
painter->fillRect(0, (1-v)*h, w, v*h, fBrush);
|
|
529
|
+
} else {
|
|
530
|
+
// draw horizontal rectangle
|
|
531
|
+
painter->fillRect(0, 0, v*w, h, fBrush);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
virtual void paintEvent(QPaintEvent*)
|
|
536
|
+
{
|
|
537
|
+
QPainter painter(this);
|
|
538
|
+
paintContent(&painter);
|
|
539
|
+
paintScale(&painter);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
public:
|
|
543
|
+
|
|
544
|
+
linBargraph(FAUSTFLOAT lo, FAUSTFLOAT hi) : AbstractDisplay(lo, hi)
|
|
545
|
+
{
|
|
546
|
+
// compute the brush that will be used to
|
|
547
|
+
// paint the value
|
|
548
|
+
QColor c(0xffa500); // orange
|
|
549
|
+
int x = int(height() < width()); // gradient direction
|
|
550
|
+
QLinearGradient g(0,0,x,1-x);
|
|
551
|
+
g.setCoordinateMode(QGradient::ObjectBoundingMode);
|
|
552
|
+
g.setColorAt(0.0, c.lighter());
|
|
553
|
+
g.setColorAt(0.2, c);
|
|
554
|
+
g.setColorAt(0.8, c);
|
|
555
|
+
g.setColorAt(0.9, c.darker(120));
|
|
556
|
+
fBrush = QBrush(g);
|
|
557
|
+
}
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* A simple vertical bargraph
|
|
562
|
+
*/
|
|
563
|
+
class linVerticalBargraph : public linBargraph
|
|
564
|
+
{
|
|
565
|
+
|
|
566
|
+
public:
|
|
567
|
+
|
|
568
|
+
linVerticalBargraph(FAUSTFLOAT lo, FAUSTFLOAT hi) : linBargraph(lo, hi)
|
|
569
|
+
{
|
|
570
|
+
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
virtual QSize sizeHint() const
|
|
574
|
+
{
|
|
575
|
+
return QSize(16, 128);
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* A simple horizontal bargraph
|
|
581
|
+
*/
|
|
582
|
+
class linHorizontalBargraph : public linBargraph
|
|
583
|
+
{
|
|
584
|
+
|
|
585
|
+
public:
|
|
586
|
+
|
|
587
|
+
linHorizontalBargraph(FAUSTFLOAT lo, FAUSTFLOAT hi) : linBargraph(lo, hi)
|
|
588
|
+
{
|
|
589
|
+
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
virtual QSize sizeHint() const
|
|
593
|
+
{
|
|
594
|
+
return QSize(128, 16);
|
|
595
|
+
}
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* A dB Bargraph with a scale of colors
|
|
600
|
+
*/
|
|
601
|
+
class dbBargraph : public dbAbstractDisplay
|
|
602
|
+
{
|
|
603
|
+
|
|
604
|
+
protected:
|
|
605
|
+
|
|
606
|
+
QBrush fBackColor;
|
|
607
|
+
|
|
608
|
+
// These two abstract methods are implemented
|
|
609
|
+
// according to the vertical or horizontal direction
|
|
610
|
+
// in dbVerticalBargraph and dbHorizontalBargraph
|
|
611
|
+
virtual void paintMark(QPainter* painter, FAUSTFLOAT v) const = 0;
|
|
612
|
+
virtual int paintSegment(QPainter* painter, int pos, FAUSTFLOAT v, const QBrush& b) const = 0;
|
|
613
|
+
|
|
614
|
+
/**
|
|
615
|
+
* Draw the logarithmic scale
|
|
616
|
+
*/
|
|
617
|
+
void paintScale(QPainter* painter) const
|
|
618
|
+
{
|
|
619
|
+
painter->fillRect(0,0,width(),height(), fBackColor);
|
|
620
|
+
painter->save();
|
|
621
|
+
painter->setPen(QColor(0x6699aa)); //0xffa500));
|
|
622
|
+
for (FAUSTFLOAT v = -10; v > fMin; v -= 10) paintMark(painter, v);
|
|
623
|
+
for (FAUSTFLOAT v = -6; v < fMax; v += 3) paintMark(painter, v);
|
|
624
|
+
painter->restore();
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
/**
|
|
628
|
+
* Draw the content using colored segments
|
|
629
|
+
*/
|
|
630
|
+
void paintContent(QPainter* painter) const
|
|
631
|
+
{
|
|
632
|
+
size_t l = fLevel.size();
|
|
633
|
+
|
|
634
|
+
FAUSTFLOAT p = -1; // fake value indicates to start from border
|
|
635
|
+
size_t n = 0;
|
|
636
|
+
// paint all the full segments < fValue
|
|
637
|
+
for (n = 0; (n < l) && (fValue > fLevel[n]); n++) {
|
|
638
|
+
p = paintSegment(painter, p, fLevel[n], fBrush[n]);
|
|
639
|
+
}
|
|
640
|
+
// paint the last segment
|
|
641
|
+
if (n == l) n = n-1;
|
|
642
|
+
p=paintSegment(painter, p, fValue, fBrush[n]);
|
|
643
|
+
|
|
644
|
+
painter->drawRect(0,0,width(),height());
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
virtual void paintEvent(QPaintEvent*)
|
|
648
|
+
{
|
|
649
|
+
QPainter painter(this);
|
|
650
|
+
paintScale(&painter);
|
|
651
|
+
paintContent(&painter);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
public:
|
|
655
|
+
|
|
656
|
+
dbBargraph(FAUSTFLOAT lo, FAUSTFLOAT hi) : dbAbstractDisplay(lo,hi)
|
|
657
|
+
{
|
|
658
|
+
QFont f = this->font();
|
|
659
|
+
f.setPointSize(6);
|
|
660
|
+
this->setFont(f);
|
|
661
|
+
fBackColor = QBrush(QColor(20,20,20));
|
|
662
|
+
}
|
|
663
|
+
};
|
|
664
|
+
|
|
665
|
+
/**
|
|
666
|
+
* Vertical dB Bargraph
|
|
667
|
+
*/
|
|
668
|
+
class dbVerticalBargraph : public dbBargraph
|
|
669
|
+
{
|
|
670
|
+
|
|
671
|
+
protected:
|
|
672
|
+
/**
|
|
673
|
+
* Convert a dB value into a vertical position
|
|
674
|
+
*/
|
|
675
|
+
FAUSTFLOAT dB2y(FAUSTFLOAT dB) const
|
|
676
|
+
{
|
|
677
|
+
FAUSTFLOAT s0 = fScaleMin;
|
|
678
|
+
FAUSTFLOAT s1 = fScaleMax;
|
|
679
|
+
FAUSTFLOAT sx = dB2Scale(dB);
|
|
680
|
+
int h = height();
|
|
681
|
+
return h - h*(s0-sx)/(s0-s1);
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
/**
|
|
685
|
+
* Paint a vertical graduation mark
|
|
686
|
+
*/
|
|
687
|
+
virtual void paintMark(QPainter* painter, FAUSTFLOAT v) const
|
|
688
|
+
{
|
|
689
|
+
int n = 10;
|
|
690
|
+
int y = dB2y(v);
|
|
691
|
+
QRect r(0,y-n,width()-1,2*n);
|
|
692
|
+
if (v > 0.0) {
|
|
693
|
+
painter->drawText(r, Qt::AlignRight|Qt::AlignVCenter, QString::number(v).prepend('+'));
|
|
694
|
+
} else {
|
|
695
|
+
painter->drawText(r, Qt::AlignRight|Qt::AlignVCenter, QString::number(v));
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* Paint a color segment
|
|
701
|
+
*/
|
|
702
|
+
virtual int paintSegment(QPainter* painter, int pos, FAUSTFLOAT v, const QBrush& b) const
|
|
703
|
+
{
|
|
704
|
+
if (pos == -1) pos = height();
|
|
705
|
+
FAUSTFLOAT y = dB2y(v);
|
|
706
|
+
painter->fillRect(0, y, width(), pos-y+1, b);
|
|
707
|
+
return y;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
public:
|
|
711
|
+
|
|
712
|
+
dbVerticalBargraph(FAUSTFLOAT lo, FAUSTFLOAT hi) : dbBargraph(lo,hi)
|
|
713
|
+
{
|
|
714
|
+
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
|
715
|
+
initLevelsColors(1);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
virtual QSize sizeHint() const
|
|
719
|
+
{
|
|
720
|
+
return QSize(18, 256);
|
|
721
|
+
}
|
|
722
|
+
};
|
|
723
|
+
|
|
724
|
+
/**
|
|
725
|
+
* Horizontal dB Bargraph
|
|
726
|
+
*/
|
|
727
|
+
class dbHorizontalBargraph : public dbBargraph
|
|
728
|
+
{
|
|
729
|
+
|
|
730
|
+
protected:
|
|
731
|
+
|
|
732
|
+
/**
|
|
733
|
+
* Convert a dB value into an horizontal position
|
|
734
|
+
*/
|
|
735
|
+
FAUSTFLOAT dB2x(FAUSTFLOAT dB) const
|
|
736
|
+
{
|
|
737
|
+
FAUSTFLOAT s0 = fScaleMin;
|
|
738
|
+
FAUSTFLOAT s1 = fScaleMax;
|
|
739
|
+
FAUSTFLOAT sx = dB2Scale(dB);
|
|
740
|
+
int w = width();
|
|
741
|
+
return w - w*(s1-sx)/(s1-s0);
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
/**
|
|
745
|
+
* Paint an horizontal graduation mark
|
|
746
|
+
*/
|
|
747
|
+
void paintMark(QPainter* painter, FAUSTFLOAT v) const
|
|
748
|
+
{
|
|
749
|
+
int n = 10;
|
|
750
|
+
int x = dB2x(v);
|
|
751
|
+
QRect r(x-n, 0, 2*n, height());
|
|
752
|
+
painter->drawText(r, Qt::AlignHCenter|Qt::AlignVCenter, QString::number(v));
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/**
|
|
756
|
+
* Paint a horizontal color segment
|
|
757
|
+
*/
|
|
758
|
+
int paintSegment(QPainter* painter, int pos, FAUSTFLOAT v, const QBrush& b) const
|
|
759
|
+
{
|
|
760
|
+
if (pos == -1) pos = 0;
|
|
761
|
+
FAUSTFLOAT x = dB2x(v);
|
|
762
|
+
painter->fillRect(pos, 0, x-pos, height(), b);
|
|
763
|
+
return x;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
public:
|
|
767
|
+
|
|
768
|
+
dbHorizontalBargraph(FAUSTFLOAT lo, FAUSTFLOAT hi) : dbBargraph(lo, hi)
|
|
769
|
+
{
|
|
770
|
+
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
|
771
|
+
initLevelsColors(0);
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
virtual QSize sizeHint() const
|
|
775
|
+
{
|
|
776
|
+
return QSize(256, 18);
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
};
|
|
780
|
+
|
|
781
|
+
//===============================END DISPLAYS====================================
|
|
782
|
+
|
|
783
|
+
/******************************************************************************
|
|
784
|
+
*******************************************************************************
|
|
785
|
+
|
|
786
|
+
IMPLEMENTATION OF GUI ITEMS
|
|
787
|
+
(QT 4.3 for FAUST)
|
|
788
|
+
|
|
789
|
+
*******************************************************************************
|
|
790
|
+
*******************************************************************************/
|
|
791
|
+
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* A push button that controls/reflects the value (O/1)
|
|
795
|
+
* of a zone.
|
|
796
|
+
*/
|
|
797
|
+
class uiButton : public QObject, public uiItem
|
|
798
|
+
{
|
|
799
|
+
Q_OBJECT
|
|
800
|
+
|
|
801
|
+
public:
|
|
802
|
+
|
|
803
|
+
QAbstractButton* fButton;
|
|
804
|
+
|
|
805
|
+
uiButton(GUI* ui, FAUSTFLOAT* zone, QAbstractButton* b) : uiItem(ui, zone), fButton(b) {}
|
|
806
|
+
|
|
807
|
+
virtual void reflectZone()
|
|
808
|
+
{
|
|
809
|
+
FAUSTFLOAT v = *fZone;
|
|
810
|
+
fCache = v;
|
|
811
|
+
fButton->setDown(v > 0.0);
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
public slots :
|
|
815
|
+
void pressed() { modifyZone(1.0); }
|
|
816
|
+
void released() { modifyZone(0.0); }
|
|
817
|
+
};
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
/**
|
|
821
|
+
* A checkbox that controls/reflects the value (O/1)
|
|
822
|
+
* of a zone.
|
|
823
|
+
*/
|
|
824
|
+
class uiCheckButton : public QObject, public uiItem
|
|
825
|
+
{
|
|
826
|
+
Q_OBJECT
|
|
827
|
+
|
|
828
|
+
public:
|
|
829
|
+
|
|
830
|
+
QCheckBox* fCheckBox;
|
|
831
|
+
|
|
832
|
+
uiCheckButton(GUI* ui, FAUSTFLOAT* zone, QCheckBox* b) : uiItem(ui, zone), fCheckBox(b) {}
|
|
833
|
+
|
|
834
|
+
virtual void reflectZone()
|
|
835
|
+
{
|
|
836
|
+
FAUSTFLOAT v = *fZone;
|
|
837
|
+
fCache = v;
|
|
838
|
+
fCheckBox->setCheckState((v < 0.5) ? Qt::Unchecked : Qt::Checked);
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
public slots :
|
|
842
|
+
void setState(int v) { modifyZone(FAUSTFLOAT(v > 0)); }
|
|
843
|
+
};
|
|
844
|
+
|
|
845
|
+
/**
|
|
846
|
+
* A slider that controls/reflects the value (min..max)
|
|
847
|
+
* of a zone.
|
|
848
|
+
*/
|
|
849
|
+
class uiSlider : public QObject, public uiItem, public uiConverter
|
|
850
|
+
{
|
|
851
|
+
Q_OBJECT
|
|
852
|
+
|
|
853
|
+
protected:
|
|
854
|
+
|
|
855
|
+
QAbstractSlider* fSlider;
|
|
856
|
+
FAUSTFLOAT fCur;
|
|
857
|
+
FAUSTFLOAT fMin;
|
|
858
|
+
FAUSTFLOAT fMax;
|
|
859
|
+
FAUSTFLOAT fStep;
|
|
860
|
+
|
|
861
|
+
public:
|
|
862
|
+
|
|
863
|
+
uiSlider(GUI* ui, FAUSTFLOAT* zone, QAbstractSlider* slider, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT step, MetaDataUI::Scale scale)
|
|
864
|
+
: uiItem(ui, zone), uiConverter(scale, 0, 10000, lo, hi), fSlider(slider), fCur(cur), fMin(lo), fMax(hi), fStep(step)
|
|
865
|
+
{
|
|
866
|
+
fSlider->setMinimum(0);
|
|
867
|
+
fSlider->setMaximum(10000);
|
|
868
|
+
//fSlider->setSingleStep(fStep);
|
|
869
|
+
fSlider->setValue(int(0.5+fConverter->faust2ui(fCur)));
|
|
870
|
+
*fZone = fCur;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
virtual ~uiSlider()
|
|
874
|
+
{}
|
|
875
|
+
|
|
876
|
+
virtual void reflectZone()
|
|
877
|
+
{
|
|
878
|
+
FAUSTFLOAT v = *fZone;
|
|
879
|
+
fCache = v;
|
|
880
|
+
fSlider->setValue(int(0.5+fConverter->faust2ui(v)));
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
public slots :
|
|
884
|
+
void setValue(int v)
|
|
885
|
+
{
|
|
886
|
+
modifyZone(fConverter->ui2faust(v));
|
|
887
|
+
}
|
|
888
|
+
};
|
|
889
|
+
|
|
890
|
+
|
|
891
|
+
/**
|
|
892
|
+
* A zone setter, an object that sets a zone with a predefined value
|
|
893
|
+
* every time the set(bool) method is called. The boolean parameter
|
|
894
|
+
* is here for compatibility with some signals and is ignored.
|
|
895
|
+
*/
|
|
896
|
+
class ZoneSetter : public QObject
|
|
897
|
+
{
|
|
898
|
+
Q_OBJECT
|
|
899
|
+
|
|
900
|
+
protected:
|
|
901
|
+
|
|
902
|
+
FAUSTFLOAT fValue;
|
|
903
|
+
FAUSTFLOAT* fZone;
|
|
904
|
+
|
|
905
|
+
public:
|
|
906
|
+
explicit ZoneSetter(FAUSTFLOAT v, FAUSTFLOAT* z, QObject* parent = NULL):
|
|
907
|
+
QObject(parent), fValue(v), fZone(z)
|
|
908
|
+
{}
|
|
909
|
+
|
|
910
|
+
public slots:
|
|
911
|
+
void set(bool)
|
|
912
|
+
{
|
|
913
|
+
*fZone = fValue;
|
|
914
|
+
}
|
|
915
|
+
};
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
/**
|
|
919
|
+
* A set of mutually exclusive radio buttons vertically
|
|
920
|
+
* layed out. The names and values used for the radio buttons
|
|
921
|
+
* are described in the string mdescr with the following syntax
|
|
922
|
+
* "{'foo':3.14; 'faa':-0.34; ... 'fii':10.5}"
|
|
923
|
+
*/
|
|
924
|
+
class uiRadioButtons : public QGroupBox, public uiItem
|
|
925
|
+
{
|
|
926
|
+
Q_OBJECT
|
|
927
|
+
|
|
928
|
+
protected:
|
|
929
|
+
|
|
930
|
+
std::vector<double> fValues;
|
|
931
|
+
std::vector<QRadioButton*> fButtons;
|
|
932
|
+
|
|
933
|
+
public:
|
|
934
|
+
|
|
935
|
+
uiRadioButtons(GUI* ui, FAUSTFLOAT* z, const char* label,
|
|
936
|
+
FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT /*step*/,
|
|
937
|
+
bool vertical, const char* mdescr, QWidget* parent)
|
|
938
|
+
: QGroupBox(label, parent), uiItem(ui, z)
|
|
939
|
+
{
|
|
940
|
+
std::vector<std::string> names;
|
|
941
|
+
std::vector<double> values;
|
|
942
|
+
|
|
943
|
+
if (parseMenuList(mdescr, names, values)) {
|
|
944
|
+
|
|
945
|
+
QBoxLayout* l;
|
|
946
|
+
if (vertical) {
|
|
947
|
+
l = new QVBoxLayout(this);
|
|
948
|
+
} else {
|
|
949
|
+
l = new QHBoxLayout(this);
|
|
950
|
+
}
|
|
951
|
+
l->setSpacing(5);
|
|
952
|
+
|
|
953
|
+
QRadioButton* defaultbutton = NULL;
|
|
954
|
+
double mindelta = FLT_MAX;
|
|
955
|
+
|
|
956
|
+
for (unsigned int i = 0; i < names.size(); i++) {
|
|
957
|
+
double v = values[i];
|
|
958
|
+
if ((v >= lo) && (v <= hi)) {
|
|
959
|
+
|
|
960
|
+
// It is a valid value included in slider's range
|
|
961
|
+
QRadioButton* b = new QRadioButton(QString(names[i].c_str()), this);
|
|
962
|
+
ZoneSetter* s = new ZoneSetter(v,z,b);
|
|
963
|
+
fValues.push_back(v);
|
|
964
|
+
fButtons.push_back(b);
|
|
965
|
+
connect(b,SIGNAL(clicked(bool)), s, SLOT(set(bool)));
|
|
966
|
+
l->addWidget(b);
|
|
967
|
+
|
|
968
|
+
// Check if this item is a good candidate to represent the current value
|
|
969
|
+
double delta = fabs(cur-v);
|
|
970
|
+
if (delta < mindelta) {
|
|
971
|
+
mindelta = delta;
|
|
972
|
+
defaultbutton = b;
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
// check the best candidate to represent the current value
|
|
977
|
+
if (defaultbutton) { defaultbutton->setChecked(true); }
|
|
978
|
+
setLayout(l);
|
|
979
|
+
} else {
|
|
980
|
+
std::cerr << "parseMenuList : (" << mdescr << ") is not a menu !\n";
|
|
981
|
+
}
|
|
982
|
+
*fZone = cur;
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
virtual void reflectZone()
|
|
986
|
+
{
|
|
987
|
+
FAUSTFLOAT v = *fZone;
|
|
988
|
+
fCache = v;
|
|
989
|
+
|
|
990
|
+
// select closest value
|
|
991
|
+
int defaultitem = -1;
|
|
992
|
+
double mindelta = FLT_MAX;
|
|
993
|
+
|
|
994
|
+
for (unsigned int i = 0; i < fValues.size(); i++) {
|
|
995
|
+
double delta = fabs(fValues[i]-v);
|
|
996
|
+
if (delta < mindelta) {
|
|
997
|
+
mindelta = delta;
|
|
998
|
+
defaultitem = i;
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
if (defaultitem > -1) { fButtons[defaultitem]->setChecked(true); }
|
|
1002
|
+
}
|
|
1003
|
+
};
|
|
1004
|
+
|
|
1005
|
+
/**
|
|
1006
|
+
* A popup menu. The names and values used for the menu items
|
|
1007
|
+
* are described in the string mdescr with the following syntax
|
|
1008
|
+
* "{'foo':3.14; 'faa':-0.34; ... 'fii':10.5}"
|
|
1009
|
+
*/
|
|
1010
|
+
class uiMenu : public QComboBox, public uiItem
|
|
1011
|
+
{
|
|
1012
|
+
Q_OBJECT
|
|
1013
|
+
|
|
1014
|
+
protected:
|
|
1015
|
+
|
|
1016
|
+
std::vector<double> fValues;
|
|
1017
|
+
|
|
1018
|
+
public:
|
|
1019
|
+
|
|
1020
|
+
uiMenu(GUI* ui, FAUSTFLOAT* z, const char* /*label*/,
|
|
1021
|
+
FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT /*step*/,
|
|
1022
|
+
const char* mdescr, QWidget* parent)
|
|
1023
|
+
: QComboBox(parent), uiItem(ui, z)
|
|
1024
|
+
{
|
|
1025
|
+
std::vector<std::string> names;
|
|
1026
|
+
std::vector<double> values;
|
|
1027
|
+
|
|
1028
|
+
if (parseMenuList(mdescr, names, values)) {
|
|
1029
|
+
|
|
1030
|
+
int defaultitem = -1;
|
|
1031
|
+
double mindelta = FLT_MAX;
|
|
1032
|
+
|
|
1033
|
+
for (unsigned int i = 0; i < names.size(); i++) {
|
|
1034
|
+
double v = values[i];
|
|
1035
|
+
if ((v >= lo) && (v <= hi)) {
|
|
1036
|
+
|
|
1037
|
+
// It is a valid value : add corresponding menu item
|
|
1038
|
+
addItem(QString(names[i].c_str()), v);
|
|
1039
|
+
fValues.push_back(v);
|
|
1040
|
+
|
|
1041
|
+
// Check if this item is a good candidate to represent the current value
|
|
1042
|
+
double delta = fabs(cur-v);
|
|
1043
|
+
if (delta < mindelta) {
|
|
1044
|
+
mindelta = delta;
|
|
1045
|
+
defaultitem = count()-1;
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
// check the best candidate to represent the current value
|
|
1050
|
+
if (defaultitem > -1) { setCurrentIndex(defaultitem); }
|
|
1051
|
+
} else {
|
|
1052
|
+
std::cerr << "parseMenuList : (" << mdescr << ") is not a menu !\n";
|
|
1053
|
+
}
|
|
1054
|
+
connect(this,SIGNAL(activated(int)), this, SLOT(updateZone(int)));
|
|
1055
|
+
*fZone = cur;
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
virtual void reflectZone()
|
|
1059
|
+
{
|
|
1060
|
+
FAUSTFLOAT v = *fZone;
|
|
1061
|
+
fCache = v;
|
|
1062
|
+
|
|
1063
|
+
// search closest value
|
|
1064
|
+
int defaultitem = -1;
|
|
1065
|
+
double mindelta = FLT_MAX;
|
|
1066
|
+
|
|
1067
|
+
for (unsigned int i=0; i<fValues.size(); i++) {
|
|
1068
|
+
double delta = fabs(fValues[i]-v);
|
|
1069
|
+
if (delta < mindelta) {
|
|
1070
|
+
mindelta = delta;
|
|
1071
|
+
defaultitem = i;
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
if (defaultitem > -1) { setCurrentIndex(defaultitem); }
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
public slots :
|
|
1078
|
+
|
|
1079
|
+
void updateZone(int)
|
|
1080
|
+
{
|
|
1081
|
+
double x = itemData(currentIndex()).toDouble();
|
|
1082
|
+
*fZone = x;
|
|
1083
|
+
}
|
|
1084
|
+
};
|
|
1085
|
+
|
|
1086
|
+
/**
|
|
1087
|
+
* A bargraph representing the value of a zone
|
|
1088
|
+
*/
|
|
1089
|
+
class uiBargraph : public QObject, public uiItem
|
|
1090
|
+
{
|
|
1091
|
+
Q_OBJECT
|
|
1092
|
+
|
|
1093
|
+
protected:
|
|
1094
|
+
|
|
1095
|
+
AbstractDisplay* fBar;
|
|
1096
|
+
|
|
1097
|
+
public:
|
|
1098
|
+
|
|
1099
|
+
uiBargraph(GUI* ui, FAUSTFLOAT* zone, AbstractDisplay* bar, FAUSTFLOAT lo, FAUSTFLOAT hi)
|
|
1100
|
+
: uiItem(ui, zone), fBar(bar)
|
|
1101
|
+
{
|
|
1102
|
+
fBar->setRange(lo, hi);
|
|
1103
|
+
fBar->setValue(lo);
|
|
1104
|
+
*fZone = lo;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
virtual void reflectZone()
|
|
1108
|
+
{
|
|
1109
|
+
FAUSTFLOAT v = *fZone;
|
|
1110
|
+
fCache = v;
|
|
1111
|
+
fBar->setValue(v);
|
|
1112
|
+
}
|
|
1113
|
+
};
|
|
1114
|
+
|
|
1115
|
+
/**
|
|
1116
|
+
* A numerical entry that controls/reflects the value (min..max)
|
|
1117
|
+
* of a zone.
|
|
1118
|
+
*/
|
|
1119
|
+
class uiNumEntry : public QObject, public uiItem
|
|
1120
|
+
{
|
|
1121
|
+
Q_OBJECT
|
|
1122
|
+
|
|
1123
|
+
protected:
|
|
1124
|
+
|
|
1125
|
+
QDoubleSpinBox* fNumEntry;
|
|
1126
|
+
FAUSTFLOAT fCur;
|
|
1127
|
+
FAUSTFLOAT fMin;
|
|
1128
|
+
FAUSTFLOAT fMax;
|
|
1129
|
+
FAUSTFLOAT fStep;
|
|
1130
|
+
|
|
1131
|
+
public:
|
|
1132
|
+
|
|
1133
|
+
uiNumEntry(GUI* ui, FAUSTFLOAT* zone, QDoubleSpinBox* numEntry, FAUSTFLOAT cur, FAUSTFLOAT lo, FAUSTFLOAT hi, FAUSTFLOAT step)
|
|
1134
|
+
: uiItem(ui, zone), fNumEntry(numEntry), fCur(cur), fMin(lo), fMax(hi), fStep(step)
|
|
1135
|
+
{
|
|
1136
|
+
int decimals = (fStep >= 1.0) ? 0 : int(0.5+log10(1.0/fStep));
|
|
1137
|
+
fNumEntry->setMinimum(fMin);
|
|
1138
|
+
fNumEntry->setMaximum(fMax);
|
|
1139
|
+
fNumEntry->setSingleStep(fStep);
|
|
1140
|
+
fNumEntry->setDecimals(decimals);
|
|
1141
|
+
fNumEntry->setValue(fCur);
|
|
1142
|
+
*fZone = fCur;
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
virtual void reflectZone()
|
|
1146
|
+
{
|
|
1147
|
+
FAUSTFLOAT v = *fZone;
|
|
1148
|
+
fCache = v;
|
|
1149
|
+
fNumEntry->setValue(v);
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
public slots :
|
|
1153
|
+
void setValue(double v)
|
|
1154
|
+
{
|
|
1155
|
+
modifyZone(FAUSTFLOAT(v));
|
|
1156
|
+
}
|
|
1157
|
+
};
|
|
1158
|
+
|
|
1159
|
+
/******************************************************************************
|
|
1160
|
+
*******************************************************************************
|
|
1161
|
+
|
|
1162
|
+
IMPLEMENTATION OF THE USER INTERFACE
|
|
1163
|
+
(QT 4.3 for FAUST)
|
|
1164
|
+
|
|
1165
|
+
*******************************************************************************
|
|
1166
|
+
*******************************************************************************/
|
|
1167
|
+
#if defined(HTTPCTRL) && defined(QRCODECTRL)
|
|
1168
|
+
// a simple utility to retrieve an abstract qr code
|
|
1169
|
+
// introduced to remove the dependency to qrencode
|
|
1170
|
+
static QImage getQRCode(const QString& url, int padding)
|
|
1171
|
+
{
|
|
1172
|
+
qrcodegen_Ecc errCorLvl = qrcodegen_Ecc_HIGH; //qrcodegen_Ecc_MEDIUM qrcodegen_Ecc_LOW Error correction level
|
|
1173
|
+
uint8_t qrcode[qrcodegen_BUFFER_LEN_MAX];
|
|
1174
|
+
uint8_t tempBuffer[qrcodegen_BUFFER_LEN_MAX];
|
|
1175
|
+
if (!qrcodegen_encodeText(url.toStdString().c_str(), tempBuffer, qrcode, errCorLvl, qrcodegen_VERSION_MIN, qrcodegen_VERSION_MAX, qrcodegen_Mask_AUTO, true))
|
|
1176
|
+
return QImage(1, 1, QImage::Format_RGB32);
|
|
1177
|
+
|
|
1178
|
+
int size = qrcodegen_getSize(qrcode);
|
|
1179
|
+
QRgb colors[2];
|
|
1180
|
+
colors[0] = qRgb(255, 255, 255); // 0 is white
|
|
1181
|
+
colors[1] = qRgb(0, 0, 0); // 1 is black
|
|
1182
|
+
// build the QRCode image
|
|
1183
|
+
QImage image(size+2*padding, size+2*padding, QImage::Format_RGB32);
|
|
1184
|
+
// clear the image
|
|
1185
|
+
for (int y=0; y<size + 2*padding; y++) {
|
|
1186
|
+
for (int x=0; x<size + 2*padding; x++) {
|
|
1187
|
+
image.setPixel(x, y, colors[0]);
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
// copy the qrcode inside
|
|
1191
|
+
for (int y = 0; y < size; y++) {
|
|
1192
|
+
for (int x = 0; x < size; x++) {
|
|
1193
|
+
image.setPixel(x+padding, y+padding, colors[qrcodegen_getModule(qrcode, x, y) & 1]);
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
return image;
|
|
1197
|
+
}
|
|
1198
|
+
#endif
|
|
1199
|
+
|
|
1200
|
+
class QTGUI : public QWidget, public GUI, public MetaDataUI
|
|
1201
|
+
{
|
|
1202
|
+
Q_OBJECT
|
|
1203
|
+
|
|
1204
|
+
protected:
|
|
1205
|
+
|
|
1206
|
+
QTimer* fTimer;
|
|
1207
|
+
std::stack<QWidget* > fGroupStack;
|
|
1208
|
+
|
|
1209
|
+
QMainWindow* fMainWindow;
|
|
1210
|
+
QVBoxLayout* fGeneralLayout;
|
|
1211
|
+
|
|
1212
|
+
QPixmap fQrCode;
|
|
1213
|
+
|
|
1214
|
+
bool isTabContext()
|
|
1215
|
+
{
|
|
1216
|
+
//return fGroupStack.empty() || ((!fGroupStack.empty()) && (dynamic_cast<QTabWidget*>(fGroupStack.top()) != 0));
|
|
1217
|
+
return ((!fGroupStack.empty()) && (dynamic_cast<QTabWidget*>(fGroupStack.top()) != NULL));
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
/**
|
|
1221
|
+
* Insert a widget into the parent widget (the top of
|
|
1222
|
+
* the stack group). The label is used if this group is
|
|
1223
|
+
* a tab.
|
|
1224
|
+
*/
|
|
1225
|
+
|
|
1226
|
+
void insert(const char* label, QWidget* widget)
|
|
1227
|
+
{
|
|
1228
|
+
if (!fGroupStack.empty()) {
|
|
1229
|
+
QWidget* mother = fGroupStack.top();
|
|
1230
|
+
QTabWidget* tab = dynamic_cast<QTabWidget*>(mother);
|
|
1231
|
+
if (tab) {
|
|
1232
|
+
tab->addTab(widget, label);
|
|
1233
|
+
} else {
|
|
1234
|
+
widget->setParent(mother);
|
|
1235
|
+
mother->layout()->addWidget(widget);
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
/**
|
|
1241
|
+
* Analyses a full label and activates the relevant options. Returns a simplified
|
|
1242
|
+
* label (without options) and an amount of stack adjustement (in case additional
|
|
1243
|
+
* containers were pushed on the stack).
|
|
1244
|
+
*/
|
|
1245
|
+
|
|
1246
|
+
int checkLabelOptions(QWidget* widget, const std::string& fullLabel, std::string& simplifiedLabel)
|
|
1247
|
+
{
|
|
1248
|
+
std::map<std::string, std::string> metadata;
|
|
1249
|
+
extractMetadata(fullLabel, simplifiedLabel, metadata);
|
|
1250
|
+
|
|
1251
|
+
if (metadata.count("tooltip")) {
|
|
1252
|
+
widget->setToolTip(metadata["tooltip"].c_str());
|
|
1253
|
+
}
|
|
1254
|
+
if (metadata["option"] == "detachable") {
|
|
1255
|
+
//openHandleBox(simplifiedLabel.c_str());
|
|
1256
|
+
return 1;
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
// no adjustement of the stack needed
|
|
1260
|
+
return 0;
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
/**
|
|
1264
|
+
* Check if a tooltip is associated to a zone and add it to the corresponding widget
|
|
1265
|
+
*/
|
|
1266
|
+
void checkForTooltip(FAUSTFLOAT* zone, QWidget* widget)
|
|
1267
|
+
{
|
|
1268
|
+
if (fTooltip.count(zone)) {
|
|
1269
|
+
widget->setToolTip(fTooltip[zone].c_str());
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
|
|
1273
|
+
void openBox(const char* fulllabel, QLayout* layout)
|
|
1274
|
+
{
|
|
1275
|
+
std::map<std::string, std::string> metadata;
|
|
1276
|
+
std::string label;
|
|
1277
|
+
extractMetadata(fulllabel, label, metadata);
|
|
1278
|
+
layout->QTSetMargins(5);
|
|
1279
|
+
QWidget* box;
|
|
1280
|
+
|
|
1281
|
+
label = startWith(label, "0x") ? "" : label;
|
|
1282
|
+
|
|
1283
|
+
if (fGroupStack.empty()) {
|
|
1284
|
+
if (isTabContext()) {
|
|
1285
|
+
box = new QWidget(this);
|
|
1286
|
+
// set background color
|
|
1287
|
+
QPalette pal = box->palette();
|
|
1288
|
+
pal.setColor(box->backgroundRole(), QColor::fromRgb(150, 150, 150));
|
|
1289
|
+
box->setPalette(pal);
|
|
1290
|
+
|
|
1291
|
+
} else if (label.size() > 0) {
|
|
1292
|
+
QGroupBox* group = new QGroupBox(this);
|
|
1293
|
+
group->setTitle(label.c_str());
|
|
1294
|
+
box = group;
|
|
1295
|
+
|
|
1296
|
+
} else {
|
|
1297
|
+
// no label here we use simple widget
|
|
1298
|
+
layout->QTSetMargins(0);
|
|
1299
|
+
box = new QWidget(this);
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
box->setLayout(layout);
|
|
1303
|
+
fGeneralLayout->addWidget(box);
|
|
1304
|
+
if (fGroupTooltip != "") {
|
|
1305
|
+
box->setToolTip(fGroupTooltip.c_str());
|
|
1306
|
+
fGroupTooltip = "";
|
|
1307
|
+
}
|
|
1308
|
+
} else {
|
|
1309
|
+
if (isTabContext()) {
|
|
1310
|
+
box = new QWidget();
|
|
1311
|
+
// set background color
|
|
1312
|
+
QPalette pal = box->palette();
|
|
1313
|
+
pal.setColor(box->backgroundRole(), QColor::fromRgb(150, 150, 150));
|
|
1314
|
+
box->setPalette(pal);
|
|
1315
|
+
|
|
1316
|
+
} else if (label.size()>0) {
|
|
1317
|
+
QGroupBox* group = new QGroupBox();
|
|
1318
|
+
group->setTitle(label.c_str());
|
|
1319
|
+
box = group;
|
|
1320
|
+
|
|
1321
|
+
} else {
|
|
1322
|
+
// no label here we use simple widget
|
|
1323
|
+
layout->QTSetMargins(0);
|
|
1324
|
+
box = new QWidget;
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
box->setLayout(layout);
|
|
1328
|
+
if (fGroupTooltip != "") {
|
|
1329
|
+
box->setToolTip(fGroupTooltip.c_str());
|
|
1330
|
+
fGroupTooltip = "";
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
insert(label.c_str(), box);
|
|
1334
|
+
fGroupStack.push(box);
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
void openTab(const char* label)
|
|
1338
|
+
{
|
|
1339
|
+
QTabWidget* group;
|
|
1340
|
+
|
|
1341
|
+
if (fGroupStack.empty()) {
|
|
1342
|
+
group = new QTabWidget(this);
|
|
1343
|
+
fGeneralLayout->addWidget(group);
|
|
1344
|
+
} else {
|
|
1345
|
+
group = new QTabWidget();
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
insert(label, group);
|
|
1349
|
+
fGroupStack.push(group);
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
public slots:
|
|
1353
|
+
|
|
1354
|
+
void update()
|
|
1355
|
+
{
|
|
1356
|
+
updateAllGuis();
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
public:
|
|
1360
|
+
|
|
1361
|
+
QTGUI(QWidget* parent) : QWidget(parent)
|
|
1362
|
+
{
|
|
1363
|
+
fGeneralLayout = new QVBoxLayout;
|
|
1364
|
+
setLayout(fGeneralLayout);
|
|
1365
|
+
QWidget::show();
|
|
1366
|
+
|
|
1367
|
+
fMainWindow = NULL;
|
|
1368
|
+
fTimer = NULL;
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
QTGUI():QWidget()
|
|
1372
|
+
{
|
|
1373
|
+
fGeneralLayout = new QVBoxLayout;
|
|
1374
|
+
setLayout(fGeneralLayout);
|
|
1375
|
+
QWidget::show();
|
|
1376
|
+
|
|
1377
|
+
fTimer = NULL;
|
|
1378
|
+
|
|
1379
|
+
fMainWindow = new QMainWindow;
|
|
1380
|
+
QScrollArea *sa = new QScrollArea(fMainWindow);
|
|
1381
|
+
|
|
1382
|
+
sa->setWidgetResizable(true);
|
|
1383
|
+
sa->setWidget(this);
|
|
1384
|
+
|
|
1385
|
+
fMainWindow->setCentralWidget(sa);
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
virtual ~QTGUI()
|
|
1389
|
+
{
|
|
1390
|
+
delete fGeneralLayout;
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1393
|
+
QString styleSheet()
|
|
1394
|
+
{
|
|
1395
|
+
QString styleSheet("");
|
|
1396
|
+
QFile file(":/Grey.qss");
|
|
1397
|
+
|
|
1398
|
+
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
1399
|
+
styleSheet = QLatin1String(file.readAll());
|
|
1400
|
+
file.close();
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
return styleSheet;
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
/**
|
|
1407
|
+
* Analyses the widget zone metadata declarations and takes
|
|
1408
|
+
* appropriate actions
|
|
1409
|
+
*/
|
|
1410
|
+
virtual void declare(FAUSTFLOAT* zone, const char* key, const char* value)
|
|
1411
|
+
{
|
|
1412
|
+
MetaDataUI::declare(zone, key, value);
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
#if defined(HTTPCTRL) && defined(QRCODECTRL)
|
|
1416
|
+
|
|
1417
|
+
//
|
|
1418
|
+
// Returns the IP address of the machine (to be qrcoded)
|
|
1419
|
+
//
|
|
1420
|
+
QString extractIPnum()
|
|
1421
|
+
{
|
|
1422
|
+
QList<QHostAddress> ipAdresses = QNetworkInterface::allAddresses();
|
|
1423
|
+
QList<QHostAddress>::iterator it;
|
|
1424
|
+
QString localhost("localhost");
|
|
1425
|
+
|
|
1426
|
+
for (it = ipAdresses.begin(); it != ipAdresses.end(); it++) {
|
|
1427
|
+
if ((*it).protocol() == QAbstractSocket::IPv4Protocol && (*it) != QHostAddress::LocalHost) {
|
|
1428
|
+
return it->toString();
|
|
1429
|
+
} else if ((*it).protocol() == QAbstractSocket::IPv4Protocol && (*it) == QHostAddress::LocalHost) {
|
|
1430
|
+
localhost = it->toString();
|
|
1431
|
+
}
|
|
1432
|
+
}
|
|
1433
|
+
|
|
1434
|
+
return localhost;
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
//
|
|
1438
|
+
// Used in HTTPD mode, display the QRCode of the URL of the application
|
|
1439
|
+
//
|
|
1440
|
+
void displayQRCode(int portnum)
|
|
1441
|
+
{
|
|
1442
|
+
QString url("http://");
|
|
1443
|
+
url += extractIPnum();
|
|
1444
|
+
url += ":";
|
|
1445
|
+
url += QString::number(portnum);
|
|
1446
|
+
displayQRCode(url, NULL);
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1449
|
+
void displayQRCode(const QString& url, QMainWindow* parent = NULL)
|
|
1450
|
+
{
|
|
1451
|
+
if (parent == NULL) {
|
|
1452
|
+
parent = new QMainWindow;
|
|
1453
|
+
}
|
|
1454
|
+
|
|
1455
|
+
QWidget* centralWidget = new QWidget;
|
|
1456
|
+
parent->setCentralWidget(centralWidget);
|
|
1457
|
+
// QTextEdit* httpdText = new QTextEdit(centralWidget);
|
|
1458
|
+
QTextBrowser* myBro = new QTextBrowser(centralWidget);
|
|
1459
|
+
|
|
1460
|
+
// //Construction of the flashcode
|
|
1461
|
+
// const int padding = 5;
|
|
1462
|
+
// QRcode* qrc = QRcode_encodeString(url.toLatin1().data(), 0, QR_ECLEVEL_H, QR_MODE_8, 1);
|
|
1463
|
+
//
|
|
1464
|
+
// // qDebug() << "QRcode width = " << qrc->width;
|
|
1465
|
+
//
|
|
1466
|
+
// QRgb colors[2];
|
|
1467
|
+
// colors[0] = qRgb(255, 255, 255); // 0 is white
|
|
1468
|
+
// colors[1] = qRgb(0, 0, 0); // 1 is black
|
|
1469
|
+
//
|
|
1470
|
+
// // build the QRCode image
|
|
1471
|
+
// QImage image(qrc->width+2*padding, qrc->width+2*padding, QImage::Format_RGB32);
|
|
1472
|
+
// // clear the image
|
|
1473
|
+
// for (int y = 0; y < qrc->width+2*padding; y++) {
|
|
1474
|
+
// for (int x = 0; x < qrc->width+2*padding; x++) {
|
|
1475
|
+
// image.setPixel(x, y, colors[0]);
|
|
1476
|
+
// }
|
|
1477
|
+
// }
|
|
1478
|
+
// // copy the qrcode inside
|
|
1479
|
+
// for (int y = 0; y < qrc->width; y++) {
|
|
1480
|
+
// for (int x = 0; x < qrc->width; x++) {
|
|
1481
|
+
// image.setPixel(x+padding, y+padding, colors[qrc->data[y*qrc->width+x]&1]);
|
|
1482
|
+
// }
|
|
1483
|
+
// }
|
|
1484
|
+
|
|
1485
|
+
const int padding = 5;
|
|
1486
|
+
QImage image = getQRCode (url, padding);
|
|
1487
|
+
// QImage big = image.scaledToWidth(qrc->width*8);
|
|
1488
|
+
QImage big = image.scaledToWidth(image.width() * 8);
|
|
1489
|
+
QLabel* myLabel = new QLabel(centralWidget);
|
|
1490
|
+
|
|
1491
|
+
fQrCode = QPixmap::fromImage(big);
|
|
1492
|
+
myLabel->setPixmap(fQrCode);
|
|
1493
|
+
|
|
1494
|
+
//----Written Address
|
|
1495
|
+
|
|
1496
|
+
QString sheet = QString::fromLatin1("a{ text-decoration: underline; color: white; font: Menlo; font-size: 14px }");
|
|
1497
|
+
// myBro->document()->setDefaultStyleSheet(sheet);
|
|
1498
|
+
// myBro->setStyleSheet("*{color: white; font: Menlo; font-size: 14px }");
|
|
1499
|
+
|
|
1500
|
+
QString text("<br>Please connect to ");
|
|
1501
|
+
text += "<br><a href = " + url + ">"+ url+ "</a>";
|
|
1502
|
+
text += "<br>Or scan the QR code below";
|
|
1503
|
+
|
|
1504
|
+
myBro->setOpenExternalLinks(true);
|
|
1505
|
+
myBro->setHtml(text);
|
|
1506
|
+
myBro->setAlignment(Qt::AlignCenter);
|
|
1507
|
+
myBro->setFixedWidth(big.width());
|
|
1508
|
+
// myBro->setFixedHeight(myBro->minimumHeight());
|
|
1509
|
+
|
|
1510
|
+
QGridLayout *mainLayout = new QGridLayout;
|
|
1511
|
+
mainLayout->addWidget(myBro, 0, 1);
|
|
1512
|
+
mainLayout->addWidget(myLabel, 1, 1);
|
|
1513
|
+
centralWidget->setLayout(mainLayout);
|
|
1514
|
+
centralWidget->show();
|
|
1515
|
+
centralWidget->adjustSize();
|
|
1516
|
+
parent->show();
|
|
1517
|
+
}
|
|
1518
|
+
|
|
1519
|
+
bool toPNG(const QString& filename, QString& error)
|
|
1520
|
+
{
|
|
1521
|
+
QFile file(filename);
|
|
1522
|
+
if (file.open(QIODevice::WriteOnly)) {
|
|
1523
|
+
fQrCode.save(&file, "PNG");
|
|
1524
|
+
return true;
|
|
1525
|
+
} else {
|
|
1526
|
+
error = "Impossible to write file.";
|
|
1527
|
+
return false;
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
#endif
|
|
1531
|
+
|
|
1532
|
+
virtual bool run()
|
|
1533
|
+
{
|
|
1534
|
+
if (!fTimer) {
|
|
1535
|
+
fTimer = new QTimer(this);
|
|
1536
|
+
QObject::connect(fTimer, SIGNAL(timeout()), this, SLOT(update()));
|
|
1537
|
+
fTimer->start(100);
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
if (fMainWindow) {
|
|
1541
|
+
fMainWindow->show();
|
|
1542
|
+
}
|
|
1543
|
+
return true;
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
virtual void stop()
|
|
1547
|
+
{
|
|
1548
|
+
if (fTimer) {
|
|
1549
|
+
fTimer->stop();
|
|
1550
|
+
delete fTimer;
|
|
1551
|
+
fTimer = NULL;
|
|
1552
|
+
}
|
|
1553
|
+
|
|
1554
|
+
GUI::stop();
|
|
1555
|
+
}
|
|
1556
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1557
|
+
//
|
|
1558
|
+
// OPEN AND CLOSE GROUPS
|
|
1559
|
+
//
|
|
1560
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1561
|
+
|
|
1562
|
+
virtual void openHorizontalBox(const char* label)
|
|
1563
|
+
{
|
|
1564
|
+
openBox(label, new QHBoxLayout());
|
|
1565
|
+
}
|
|
1566
|
+
|
|
1567
|
+
virtual void openVerticalBox(const char* label)
|
|
1568
|
+
{
|
|
1569
|
+
openBox(label, new QVBoxLayout());
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
virtual void openFrameBox(const char*)
|
|
1573
|
+
{}
|
|
1574
|
+
|
|
1575
|
+
virtual void openTabBox(const char* label)
|
|
1576
|
+
{
|
|
1577
|
+
openTab(label);
|
|
1578
|
+
}
|
|
1579
|
+
|
|
1580
|
+
virtual void closeBox()
|
|
1581
|
+
{
|
|
1582
|
+
QWidget* group = fGroupStack.top();
|
|
1583
|
+
fGroupStack.pop();
|
|
1584
|
+
if (fGroupStack.empty()) {
|
|
1585
|
+
group->show();
|
|
1586
|
+
group->adjustSize();
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1590
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1591
|
+
//
|
|
1592
|
+
// ADD BUTTONS AND CHECKBOX
|
|
1593
|
+
//
|
|
1594
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1595
|
+
|
|
1596
|
+
virtual void addButton(const char* label, FAUSTFLOAT* zone)
|
|
1597
|
+
{
|
|
1598
|
+
QAbstractButton* w = new QPushButton(label);
|
|
1599
|
+
// w->setAttribute(Qt::WA_MacNoClickThrough); // obsolete at least since Qt 5.11
|
|
1600
|
+
uiButton* c = new uiButton(this, zone, w);
|
|
1601
|
+
|
|
1602
|
+
insert(label, w);
|
|
1603
|
+
QObject::connect(w, SIGNAL(pressed()), c, SLOT(pressed()));
|
|
1604
|
+
QObject::connect(w, SIGNAL(released()), c, SLOT(released()));
|
|
1605
|
+
checkForTooltip(zone, w);
|
|
1606
|
+
clearMetadata();
|
|
1607
|
+
}
|
|
1608
|
+
|
|
1609
|
+
virtual void addToggleButton(const char*, FAUSTFLOAT*)
|
|
1610
|
+
{}
|
|
1611
|
+
|
|
1612
|
+
virtual void addCheckButton(const char* label, FAUSTFLOAT* zone)
|
|
1613
|
+
{
|
|
1614
|
+
QCheckBox* w = new QCheckBox(label);
|
|
1615
|
+
uiCheckButton* c = new uiCheckButton(this, zone, w);
|
|
1616
|
+
|
|
1617
|
+
insert(label, w);
|
|
1618
|
+
QObject::connect(w, SIGNAL(stateChanged(int)), c, SLOT(setState(int)));
|
|
1619
|
+
checkForTooltip(zone, w);
|
|
1620
|
+
clearMetadata();
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1624
|
+
//
|
|
1625
|
+
// ADD NUMERICAL ENTRY
|
|
1626
|
+
//
|
|
1627
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1628
|
+
|
|
1629
|
+
virtual void addNumEntry(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step)
|
|
1630
|
+
{
|
|
1631
|
+
if (isKnob(zone)) {
|
|
1632
|
+
addVerticalKnob(label, zone, init, min, max, step);
|
|
1633
|
+
return;
|
|
1634
|
+
} else if (isRadio(zone)) {
|
|
1635
|
+
addVerticalRadioButtons(label, zone, init, min, max, step, fRadioDescription[zone].c_str());
|
|
1636
|
+
return;
|
|
1637
|
+
} else if (isMenu(zone)) {
|
|
1638
|
+
addMenu(label, zone, init, min, max, step, fMenuDescription[zone].c_str());
|
|
1639
|
+
return;
|
|
1640
|
+
}
|
|
1641
|
+
//insert(label, new QDoubleSpinBox());
|
|
1642
|
+
if (label && label[0]) openVerticalBox(label);
|
|
1643
|
+
QDoubleSpinBox* w = new QDoubleSpinBox();
|
|
1644
|
+
uiNumEntry* c = new uiNumEntry(this, zone, w, init, min, max, step);
|
|
1645
|
+
insert(label, w);
|
|
1646
|
+
std::string suffix = " " + fUnit[zone];
|
|
1647
|
+
w->setSuffix(suffix.c_str());
|
|
1648
|
+
QObject::connect(w, SIGNAL(valueChanged(double)), c, SLOT(setValue(double)));
|
|
1649
|
+
if (label && label[0]) closeBox();
|
|
1650
|
+
checkForTooltip(zone, w);
|
|
1651
|
+
clearMetadata();
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1654
|
+
// special num entry without buttons
|
|
1655
|
+
virtual void addNumDisplay(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step)
|
|
1656
|
+
{
|
|
1657
|
+
//insert(label, new QDoubleSpinBox());
|
|
1658
|
+
if (label && label[0]) openVerticalBox(label);
|
|
1659
|
+
QDoubleSpinBox* w = new QDoubleSpinBox();
|
|
1660
|
+
w->setAlignment(Qt::AlignHCenter);
|
|
1661
|
+
#if 1
|
|
1662
|
+
w->setStyleSheet(
|
|
1663
|
+
"QDoubleSpinBox {"
|
|
1664
|
+
"border: 2px solid orange;"
|
|
1665
|
+
"border-radius: 5px;"
|
|
1666
|
+
"font-size: 8pt;"
|
|
1667
|
+
"}"
|
|
1668
|
+
);
|
|
1669
|
+
#endif
|
|
1670
|
+
uiNumEntry* c = new uiNumEntry(this, zone, w, init, min, max, step);
|
|
1671
|
+
insert(label, w);
|
|
1672
|
+
w->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
|
1673
|
+
std::string suffix = " " + fUnit[zone];
|
|
1674
|
+
w->setSuffix(suffix.c_str());
|
|
1675
|
+
QObject::connect(w, SIGNAL(valueChanged(double)), c, SLOT(setValue(double)));
|
|
1676
|
+
if (label && label[0]) closeBox();
|
|
1677
|
+
checkForTooltip(zone, w);
|
|
1678
|
+
// Metadata is not cleared here, since it will be by the enclosing element calling addNumDisplay
|
|
1679
|
+
}
|
|
1680
|
+
|
|
1681
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1682
|
+
//
|
|
1683
|
+
// ADD KNOBS
|
|
1684
|
+
//
|
|
1685
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1686
|
+
|
|
1687
|
+
virtual void addVerticalKnob(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step)
|
|
1688
|
+
{
|
|
1689
|
+
openVerticalBox(label);
|
|
1690
|
+
QDial* w = new QDial(); //qsynthKnob();
|
|
1691
|
+
uiSlider* c = new uiSlider(this, zone, w, init, min, max, step, getScale(zone));
|
|
1692
|
+
insert(label, w);
|
|
1693
|
+
w->setStyle(new qsynthDialVokiStyle());
|
|
1694
|
+
w->setFocusPolicy(Qt::StrongFocus);
|
|
1695
|
+
w->setWrapping(DIAL_WRAPPING);
|
|
1696
|
+
QObject::connect(w, SIGNAL(valueChanged(int)), c, SLOT(setValue(int)));
|
|
1697
|
+
addNumDisplay(0, zone, init, min, max, step);
|
|
1698
|
+
|
|
1699
|
+
// compute the size of the knob+display
|
|
1700
|
+
int width = int(64 * pow(2, fGuiSize[zone]));
|
|
1701
|
+
int height = int(100 * pow(2, fGuiSize[zone]));
|
|
1702
|
+
fGroupStack.top()->setMinimumSize(width, height);
|
|
1703
|
+
fGroupStack.top()->setMaximumSize(width, height);
|
|
1704
|
+
|
|
1705
|
+
closeBox();
|
|
1706
|
+
checkForTooltip(zone, w);
|
|
1707
|
+
clearMetadata();
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
virtual void addHorizontalKnob(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step)
|
|
1711
|
+
{
|
|
1712
|
+
openHorizontalBox(label);
|
|
1713
|
+
QDial* w = new QDial(); //new qsynthKnob();
|
|
1714
|
+
uiSlider* c = new uiSlider(this, zone, w, init, min, max, step, getScale(zone));
|
|
1715
|
+
insert(label, w);
|
|
1716
|
+
w->setStyle(new qsynthDialVokiStyle());
|
|
1717
|
+
w->setFocusPolicy(Qt::StrongFocus);
|
|
1718
|
+
w->setWrapping(DIAL_WRAPPING);
|
|
1719
|
+
QObject::connect(w, SIGNAL(valueChanged(int)), c, SLOT(setValue(int)));
|
|
1720
|
+
addNumDisplay(0, zone, init, min, max, step);
|
|
1721
|
+
closeBox();
|
|
1722
|
+
checkForTooltip(zone, w);
|
|
1723
|
+
clearMetadata();
|
|
1724
|
+
}
|
|
1725
|
+
|
|
1726
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1727
|
+
//
|
|
1728
|
+
// ADD SLIDERS
|
|
1729
|
+
//
|
|
1730
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1731
|
+
|
|
1732
|
+
virtual void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step)
|
|
1733
|
+
{
|
|
1734
|
+
if (isKnob(zone)) {
|
|
1735
|
+
addVerticalKnob(label, zone, init, min, max, step);
|
|
1736
|
+
return;
|
|
1737
|
+
} else if (isRadio(zone)) {
|
|
1738
|
+
addVerticalRadioButtons(label, zone, init, min, max, step, fRadioDescription[zone].c_str());
|
|
1739
|
+
return;
|
|
1740
|
+
} else if (isMenu(zone)) {
|
|
1741
|
+
addMenu(label, zone, init, min, max, step, fMenuDescription[zone].c_str());
|
|
1742
|
+
return;
|
|
1743
|
+
}
|
|
1744
|
+
openVerticalBox(label);
|
|
1745
|
+
QSlider* w = new QSlider(Qt::Vertical);
|
|
1746
|
+
w->setMinimumHeight(160);
|
|
1747
|
+
w->setMinimumWidth(34);
|
|
1748
|
+
//w->setTickPosition(QSlider::TicksBothSides);
|
|
1749
|
+
uiSlider* c = new uiSlider(this, zone, w, init, min, max, step, getScale(zone));
|
|
1750
|
+
insert(label, w);
|
|
1751
|
+
QObject::connect(w, SIGNAL(valueChanged(int)), c, SLOT(setValue(int)));
|
|
1752
|
+
addNumDisplay(0, zone, init, min, max, step);
|
|
1753
|
+
closeBox();
|
|
1754
|
+
checkForTooltip(zone, w);
|
|
1755
|
+
clearMetadata();
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
virtual void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step)
|
|
1759
|
+
{
|
|
1760
|
+
if (isKnob(zone)) {
|
|
1761
|
+
addHorizontalKnob(label, zone, init, min, max, step);
|
|
1762
|
+
return;
|
|
1763
|
+
} else if (isRadio(zone)) {
|
|
1764
|
+
addHorizontalRadioButtons(label, zone, init, min, max, step, fRadioDescription[zone].c_str());
|
|
1765
|
+
return;
|
|
1766
|
+
} else if (isMenu(zone)) {
|
|
1767
|
+
addMenu(label, zone, init, min, max, step, fMenuDescription[zone].c_str());
|
|
1768
|
+
return;
|
|
1769
|
+
}
|
|
1770
|
+
openHorizontalBox(label);
|
|
1771
|
+
QSlider* w = new QSlider(Qt::Horizontal);
|
|
1772
|
+
w->setMinimumHeight(34);
|
|
1773
|
+
w->setMinimumWidth(160);
|
|
1774
|
+
//w->setTickPosition(QSlider::TicksBothSides);
|
|
1775
|
+
uiSlider* c = new uiSlider(this, zone, w, init, min, max, step, getScale(zone));
|
|
1776
|
+
insert(label, w);
|
|
1777
|
+
QObject::connect(w, SIGNAL(valueChanged(int)), c, SLOT(setValue(int)));
|
|
1778
|
+
addNumDisplay(0, zone, init, min, max, step);
|
|
1779
|
+
closeBox();
|
|
1780
|
+
checkForTooltip(zone, w);
|
|
1781
|
+
clearMetadata();
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1784
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1785
|
+
//
|
|
1786
|
+
// ADD RADIO-BUTTONS AND MENUS
|
|
1787
|
+
//
|
|
1788
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1789
|
+
|
|
1790
|
+
virtual void addVerticalRadioButtons(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min,
|
|
1791
|
+
FAUSTFLOAT max, FAUSTFLOAT step, const char* mdescr)
|
|
1792
|
+
{
|
|
1793
|
+
uiRadioButtons* w = new uiRadioButtons(this, zone, label, init, min, max, step, true, mdescr, 0);
|
|
1794
|
+
insert(label, w);
|
|
1795
|
+
checkForTooltip(zone, w);
|
|
1796
|
+
clearMetadata();
|
|
1797
|
+
}
|
|
1798
|
+
|
|
1799
|
+
virtual void addHorizontalRadioButtons(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min,
|
|
1800
|
+
FAUSTFLOAT max, FAUSTFLOAT step, const char* mdescr)
|
|
1801
|
+
{
|
|
1802
|
+
uiRadioButtons* w = new uiRadioButtons(this, zone, label, init, min, max, step, false, mdescr, 0);
|
|
1803
|
+
insert(label, w);
|
|
1804
|
+
checkForTooltip(zone, w);
|
|
1805
|
+
clearMetadata();
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
virtual void addMenu(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min,
|
|
1809
|
+
FAUSTFLOAT max, FAUSTFLOAT step, const char* mdescr)
|
|
1810
|
+
{
|
|
1811
|
+
if (label && label[0]) openVerticalBox(label);
|
|
1812
|
+
uiMenu* w = new uiMenu(this, zone, label, init, min, max, step, mdescr, 0);
|
|
1813
|
+
insert(label, w);
|
|
1814
|
+
checkForTooltip(zone, w);
|
|
1815
|
+
if (label && label[0]) closeBox();
|
|
1816
|
+
clearMetadata();
|
|
1817
|
+
}
|
|
1818
|
+
|
|
1819
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1820
|
+
//
|
|
1821
|
+
// ADD BARGRAPHS
|
|
1822
|
+
//
|
|
1823
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
1824
|
+
|
|
1825
|
+
virtual void addHorizontalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max)
|
|
1826
|
+
{
|
|
1827
|
+
openVerticalBox(label);
|
|
1828
|
+
if (isNumerical(zone)) {
|
|
1829
|
+
addNumDisplay(0, zone, min, min, max, (max-min)/pow(10, FLT_DIG));
|
|
1830
|
+
} else {
|
|
1831
|
+
AbstractDisplay* bargraph;
|
|
1832
|
+
bool db = (fUnit[zone] == "dB");
|
|
1833
|
+
if (isLed(zone)) {
|
|
1834
|
+
if (db) {
|
|
1835
|
+
bargraph = new dbLED(min, max);
|
|
1836
|
+
} else {
|
|
1837
|
+
bargraph = new LED(min, max);
|
|
1838
|
+
}
|
|
1839
|
+
} else {
|
|
1840
|
+
if (db) {
|
|
1841
|
+
bargraph = new dbHorizontalBargraph(min, max);
|
|
1842
|
+
} else {
|
|
1843
|
+
bargraph = new linHorizontalBargraph(min, max);
|
|
1844
|
+
}
|
|
1845
|
+
}
|
|
1846
|
+
|
|
1847
|
+
new uiBargraph(this, zone, bargraph, min, max);
|
|
1848
|
+
insert(label, bargraph);
|
|
1849
|
+
checkForTooltip(zone, bargraph);
|
|
1850
|
+
}
|
|
1851
|
+
closeBox();
|
|
1852
|
+
clearMetadata();
|
|
1853
|
+
}
|
|
1854
|
+
|
|
1855
|
+
virtual void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max)
|
|
1856
|
+
{
|
|
1857
|
+
openVerticalBox(label);
|
|
1858
|
+
if (isNumerical(zone)) {
|
|
1859
|
+
addNumDisplay(0, zone, min, min, max, (max-min)/pow(10, FLT_DIG));
|
|
1860
|
+
} else {
|
|
1861
|
+
AbstractDisplay* bargraph;
|
|
1862
|
+
bool db = (fUnit[zone] == "dB");
|
|
1863
|
+
if (isLed(zone)) {
|
|
1864
|
+
if (db) {
|
|
1865
|
+
bargraph = new dbLED(min, max);
|
|
1866
|
+
} else {
|
|
1867
|
+
bargraph = new LED(min, max);
|
|
1868
|
+
}
|
|
1869
|
+
} else {
|
|
1870
|
+
if (db) {
|
|
1871
|
+
bargraph = new dbVerticalBargraph(min, max);
|
|
1872
|
+
} else {
|
|
1873
|
+
bargraph = new linVerticalBargraph(min, max);
|
|
1874
|
+
}
|
|
1875
|
+
}
|
|
1876
|
+
new uiBargraph(this, zone, bargraph, min, max);
|
|
1877
|
+
insert(label, bargraph);
|
|
1878
|
+
addNumDisplay(0, zone, min, min, max, (max-min)/1000.0);
|
|
1879
|
+
checkForTooltip(zone, bargraph);
|
|
1880
|
+
}
|
|
1881
|
+
closeBox();
|
|
1882
|
+
clearMetadata();
|
|
1883
|
+
}
|
|
1884
|
+
};
|
|
1885
|
+
|
|
1886
|
+
#ifdef _WIN32
|
|
1887
|
+
# pragma warning (default: 4100)
|
|
1888
|
+
#endif
|
|
1889
|
+
|
|
1890
|
+
#endif
|
|
1891
|
+
/************************** END QTUI.h **************************/
|