├── .gitattributes ├── Resources ├── Images │ ├── copy.png │ ├── icon.png │ ├── reload.png │ ├── garbage.png │ ├── settings.png │ ├── flower_center.png │ └── flower_petals.png ├── Fonts │ └── DejaVuSansMono.ttf └── Credits │ ├── CreditsAU │ ├── CreditsVST │ └── CreditsLV2 ├── Plugins └── Examples │ ├── Bulgroz │ ├── .DS_Store │ ├── Bulgroz.png │ ├── Bulgroz.txt │ ├── Infos.txt │ ├── program.get.pd │ ├── param.get.pd │ ├── param.set.pd │ ├── param.change.pd │ ├── Bulgroz.pd │ └── delback~.pd │ ├── AlmondOrgan │ ├── Spip.png │ ├── .DS_Store │ ├── Infos.txt │ ├── volume~.pd │ ├── gui.link.pd │ ├── harmonic.fill.pd │ ├── param.get.pd │ ├── harmonic.set.pd │ ├── param.set.pd │ ├── midi.ctrl.link.pd │ ├── overdrive~.pd │ ├── program.manager.pd │ ├── param.change.pd │ ├── AlmondOrgan.txt │ ├── voice~.pd │ └── leslie~.pd │ ├── Castafiore │ ├── .DS_Store │ ├── Castafiore.png │ ├── Infos.txt │ ├── Castafiore.txt │ ├── program.get.pd │ ├── param.get.pd │ ├── param.set.pd │ ├── param.change.pd │ └── Castafiore.pd │ ├── MiniMock │ ├── Infos.txt │ ├── param.get.pd │ ├── param.set.pd │ ├── param.change.pd │ └── MiniMock.txt │ ├── PdStal │ └── PdStal.txt │ └── PdStalFx │ └── PdStalFx.txt ├── .github ├── scripts │ ├── package.bat │ └── package.sh ├── ISSUE_TEMPLATE.md └── CODE_OF_CONDUCT.md ├── .gitignore ├── LV2 ├── lv2 │ ├── atom │ │ ├── manifest.ttl │ │ └── atom-test-utils.c │ ├── log │ │ ├── manifest.ttl │ │ ├── log.ttl │ │ ├── log.h │ │ └── log.meta.ttl │ ├── midi │ │ └── manifest.ttl │ ├── time │ │ ├── manifest.ttl │ │ ├── time.h │ │ ├── time.ttl │ │ └── time.meta.ttl │ ├── urid │ │ ├── manifest.ttl │ │ ├── urid.ttl │ │ └── urid.meta.ttl │ ├── event │ │ ├── manifest.ttl │ │ └── event.ttl │ ├── morph │ │ ├── manifest.ttl │ │ ├── morph.ttl │ │ ├── morph.h │ │ └── morph.meta.ttl │ ├── patch │ │ ├── manifest.ttl │ │ └── patch.h │ ├── state │ │ ├── manifest.ttl │ │ └── state.ttl │ ├── ui │ │ └── manifest.ttl │ ├── worker │ │ ├── manifest.ttl │ │ ├── worker.ttl │ │ └── worker.meta.ttl │ ├── options │ │ ├── manifest.ttl │ │ └── options.ttl │ ├── presets │ │ ├── manifest.ttl │ │ ├── presets.ttl │ │ ├── presets.h │ │ └── presets.meta.ttl │ ├── units │ │ └── manifest.ttl │ ├── uri-map │ │ ├── manifest.ttl │ │ ├── uri-map.ttl │ │ └── uri-map.meta.ttl │ ├── buf-size │ │ ├── manifest.ttl │ │ ├── buf-size.ttl │ │ └── buf-size.h │ ├── data-access │ │ ├── manifest.ttl │ │ ├── data-access.ttl │ │ ├── data-access.h │ │ └── data-access.meta.ttl │ ├── dynmanifest │ │ ├── manifest.ttl │ │ └── dynmanifest.ttl │ ├── parameters │ │ ├── manifest.ttl │ │ └── parameters.meta.ttl │ ├── port-groups │ │ └── manifest.ttl │ ├── port-props │ │ ├── manifest.ttl │ │ ├── port-props.ttl │ │ └── port-props.h │ ├── resize-port │ │ ├── manifest.ttl │ │ ├── resize-port.ttl │ │ ├── resize-port.meta.ttl │ │ └── resize-port.h │ ├── instance-access │ │ ├── manifest.ttl │ │ ├── instance-access.ttl │ │ ├── instance-access.h │ │ └── instance-access.meta.ttl │ └── core │ │ ├── manifest.ttl │ │ ├── people.ttl │ │ ├── attributes.h │ │ └── lv2_util.h ├── main.c └── includes │ └── lv2_external_ui.h ├── Source ├── PluginFileWatcher.cpp ├── PluginLookAndFeel.hpp ├── PluginConfig.h ├── Pd │ ├── x_libpd_extra_utils.h │ ├── PdPatch.hpp │ ├── PdPatch.cpp │ ├── PdObject.hpp │ ├── PdAtom.hpp │ ├── PdArray.hpp │ ├── PdObject.cpp │ ├── PdArray.cpp │ ├── x_libpd_multi.h │ └── x_libpd_extra_utils.c ├── PluginEditorComponents.h ├── PluginEditor.h ├── PluginFileWatcher.h ├── PluginParser.h ├── PluginEditorConsole.hpp ├── PluginParameter.h ├── PluginConsole.h └── PluginEditor.cpp └── .gitmodules /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | Plugins/camomile text eol=lf 3 | -------------------------------------------------------------------------------- /Resources/Images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Resources/Images/copy.png -------------------------------------------------------------------------------- /Resources/Images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Resources/Images/icon.png -------------------------------------------------------------------------------- /Resources/Images/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Resources/Images/reload.png -------------------------------------------------------------------------------- /Resources/Images/garbage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Resources/Images/garbage.png -------------------------------------------------------------------------------- /Resources/Images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Resources/Images/settings.png -------------------------------------------------------------------------------- /Plugins/Examples/Bulgroz/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Plugins/Examples/Bulgroz/.DS_Store -------------------------------------------------------------------------------- /Resources/Fonts/DejaVuSansMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Resources/Fonts/DejaVuSansMono.ttf -------------------------------------------------------------------------------- /Resources/Images/flower_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Resources/Images/flower_center.png -------------------------------------------------------------------------------- /Resources/Images/flower_petals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Resources/Images/flower_petals.png -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/Spip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Plugins/Examples/AlmondOrgan/Spip.png -------------------------------------------------------------------------------- /Plugins/Examples/Bulgroz/Bulgroz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Plugins/Examples/Bulgroz/Bulgroz.png -------------------------------------------------------------------------------- /Plugins/Examples/Castafiore/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Plugins/Examples/Castafiore/.DS_Store -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Plugins/Examples/AlmondOrgan/.DS_Store -------------------------------------------------------------------------------- /Plugins/Examples/Castafiore/Castafiore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pierreguillot/Camomile/HEAD/Plugins/Examples/Castafiore/Castafiore.png -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/Infos.txt: -------------------------------------------------------------------------------- 1 | The Almond Organ is a twelve voices synthesizer inspired by the Hammond organ. 2 | 3 | Version: 1.0 4 | Author: Pierre Guillot 5 | -------------------------------------------------------------------------------- /Plugins/Examples/Castafiore/Infos.txt: -------------------------------------------------------------------------------- 1 | Castafiore is a real-time pitch shifter effect using delay lines to transpose between -2 and 2 octaves. 2 | 3 | Version: 1.0 4 | Author: Pierre Guillot 5 | -------------------------------------------------------------------------------- /Plugins/Examples/MiniMock/Infos.txt: -------------------------------------------------------------------------------- 1 | MiniMock is a MIDI synthesizer inspired by the MiniMoog patch by Jaime E. Oliver La Rosa from the Faculty of Arts and Sciences of NYU. 2 | 3 | Version: 1.0 4 | Author: Pierre Guillot 5 | -------------------------------------------------------------------------------- /.github/scripts/package.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | del Camomile-%1.zip /Q 3 | xcopy Plugins Camomile /E /I 4 | copy README.md Camomile\README.md 5 | copy ChangeLog.md Camomile\ChangeLog.md 6 | copy LICENSE Camomile\LICENSE.txt 7 | 7z a Camomile-%1.zip Camomile 8 | @echo on 9 | -------------------------------------------------------------------------------- /.github/scripts/package.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm -f Camomile-$1.zip 4 | cp -r Plugins Camomile 5 | cp README.md Camomile/README.md 6 | cp ChangeLog.md Camomile/ChangeLog.md 7 | cp LICENSE Camomile/LICENSE.txt 8 | zip -r -q Camomile-$1.zip Camomile 9 | rm -r Camomile 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | #Examples 3 | /Plugins/* 4 | !/Plugins/Examples/AlmondOrgan/ 5 | !/Plugins/Examples/Bulgroz/ 6 | !/Plugins/Examples/Castafiore/ 7 | !/Plugins/Examples/MiniMock/ 8 | !/Plugins/Examples/PdStalFx/ 9 | !/Plugins/Examples/PdStal/ 10 | 11 | *.zip 12 | /build/* 13 | -------------------------------------------------------------------------------- /LV2/lv2/atom/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 2 ; 7 | lv2:microVersion 2 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/log/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 2 ; 7 | lv2:microVersion 4 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/midi/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 10 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/time/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 6 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/urid/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 4 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/event/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 12 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/morph/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 0 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/patch/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 2 ; 7 | lv2:microVersion 8 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/state/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 2 ; 7 | lv2:microVersion 6 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/ui/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 2 ; 7 | lv2:microVersion 22 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/worker/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 2 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/options/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 4 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/presets/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 2 ; 7 | lv2:microVersion 8 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/units/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 5 ; 7 | lv2:microVersion 12 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/uri-map/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 6 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/buf-size/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 4 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/data-access/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 6 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/dynmanifest/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 6 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/parameters/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 4 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/port-groups/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 4 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/port-props/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 2 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /LV2/lv2/resize-port/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 0 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /Plugins/Examples/Bulgroz/Bulgroz.txt: -------------------------------------------------------------------------------- 1 | param -name Window Size -label ms -min 0 -max 10000 -default 220; 2 | program short; 3 | program medium; 4 | program long; 5 | iolayout 2 2; 6 | code zWrt; 7 | type effect; 8 | image Bulgroz.png; 9 | description Infos.txt; 10 | manufacturer Pierre Guillot; 11 | compatibility 1.0.7; 12 | -------------------------------------------------------------------------------- /LV2/lv2/instance-access/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix rdfs: . 3 | 4 | 5 | a lv2:Specification ; 6 | lv2:minorVersion 1 ; 7 | lv2:microVersion 6 ; 8 | rdfs:seeAlso . 9 | 10 | -------------------------------------------------------------------------------- /Source/PluginFileWatcher.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015-2018 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #include "PluginFileWatcher.h" 8 | #include 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Examples/Bulgroz/Infos.txt: -------------------------------------------------------------------------------- 1 | Bulgroz is an effect that reverse sound using delay lines and window functions allowing real time audio processing. 2 | Two sentences which the length depends on the window size are continuously playing in phase opposition. 3 | The effect is compatible with two channels. 4 | 5 | Version: 1.0 6 | Author: Pierre Guillot 7 | -------------------------------------------------------------------------------- /Plugins/Examples/Castafiore/Castafiore.txt: -------------------------------------------------------------------------------- 1 | param -name Picth -label ½tone -min -24 -max 24 -default 0; 2 | program fundamental; 3 | program major-third; 4 | program fifth; 5 | program octave; 6 | iolayout 2 2; 7 | code zUrt; 8 | type effect; 9 | image Castafiore.png; 10 | description Infos.txt; 11 | manufacturer Pierre Guillot; 12 | compatibility 1.0.7; 13 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Juce"] 2 | path = Juce 3 | url=https://github.com/WeAreROLI/JUCE.git 4 | [submodule "libpd/pthreads-win32/pthread-win32"] 5 | path = libpd/pthreads-win32/pthread-win32 6 | url = https://github.com/GerHobbelt/pthread-win32.git 7 | [submodule "libpd/pure-data"] 8 | path = libpd/pure-data 9 | url = https://github.com/pierreguillot/pure-data.git 10 | -------------------------------------------------------------------------------- /LV2/lv2/data-access/data-access.ttl: -------------------------------------------------------------------------------- 1 | @prefix da: . 2 | @prefix lv2: . 3 | @prefix rdfs: . 4 | 5 | 6 | a lv2:Feature ; 7 | rdfs:label "data access" ; 8 | rdfs:comment "A feature that provides access to plugin extension data." ; 9 | rdfs:seeAlso , 10 | . 11 | 12 | -------------------------------------------------------------------------------- /LV2/lv2/core/manifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix doap: . 2 | @prefix lv2: . 3 | @prefix rdfs: . 4 | 5 | 6 | a lv2:Specification ; 7 | lv2:minorVersion 18 ; 8 | lv2:microVersion 0 ; 9 | rdfs:seeAlso . 10 | 11 | 12 | a doap:Project ; 13 | rdfs:seeAlso , 14 | . 15 | 16 | -------------------------------------------------------------------------------- /LV2/lv2/instance-access/instance-access.ttl: -------------------------------------------------------------------------------- 1 | @prefix ia: . 2 | @prefix lv2: . 3 | @prefix rdfs: . 4 | 5 | 6 | a lv2:Feature ; 7 | rdfs:label "instance access" ; 8 | rdfs:comment "A feature that provides access to a plugin instance." ; 9 | rdfs:seeAlso , 10 | . 11 | 12 | -------------------------------------------------------------------------------- /Plugins/Examples/Bulgroz/program.get.pd: -------------------------------------------------------------------------------- 1 | #N canvas 487 370 259 354 10; 2 | #X obj 17 17 r program; 3 | #X obj 17 128 s camomile; 4 | #X obj 17 38 t b f b, f 20; 5 | #X obj 75 59 outlet; 6 | #X obj 134 59 f \$1; 7 | #X obj 17 59 f \$1; 8 | #X msg 134 84 param change \$1 1; 9 | #X msg 17 84 param change \$1 0; 10 | #X connect 0 0 2 0; 11 | #X connect 2 0 5 0; 12 | #X connect 2 1 3 0; 13 | #X connect 2 2 4 0; 14 | #X connect 4 0 6 0; 15 | #X connect 5 0 7 0; 16 | #X connect 6 0 1 0; 17 | #X connect 7 0 1 0; 18 | -------------------------------------------------------------------------------- /Plugins/Examples/Castafiore/program.get.pd: -------------------------------------------------------------------------------- 1 | #N canvas 487 370 259 354 10; 2 | #X obj 17 17 r program; 3 | #X obj 17 128 s camomile; 4 | #X obj 17 38 t b f b, f 20; 5 | #X obj 75 59 outlet; 6 | #X obj 134 59 f \$1; 7 | #X obj 17 59 f \$1; 8 | #X msg 134 84 param change \$1 1; 9 | #X msg 17 84 param change \$1 0; 10 | #X connect 0 0 2 0; 11 | #X connect 2 0 5 0; 12 | #X connect 2 1 3 0; 13 | #X connect 2 2 4 0; 14 | #X connect 4 0 6 0; 15 | #X connect 5 0 7 0; 16 | #X connect 6 0 1 0; 17 | #X connect 7 0 1 0; 18 | -------------------------------------------------------------------------------- /Resources/Credits/CreditsAU: -------------------------------------------------------------------------------- 1 | Camomile is a free and open-source audio plugin with Pure Data embedded that offers to load and to control patches inside a digital audio workstation. 2 | 3 | Version: 1.0.6 4 | Author: Pierre Guillot 5 | Organizations: CICM | Université Paris 8 6 | Website: github.com/pierreguillot/camomile 7 | Credits: 8 | • Pure Data by Miller Puckette and others 9 | • libpd by the Peter Brinkmann, Dan Wilcox and others 10 | • JUCE by ROLI Ltd. 11 | • MoodyCamel by Cameron Desrochers 12 | • Console icons by Gregor Cresnar 13 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/volume~.pd: -------------------------------------------------------------------------------- 1 | #N canvas 508 186 200 204 10; 2 | #X obj 75 138 *~; 3 | #X obj 90 70 dbtorms; 4 | #X obj 90 92 pack f 20; 5 | #X obj 90 114 line~; 6 | #X obj 75 24 inlet~; 7 | #X obj 75 160 outlet~; 8 | #X obj 25 138 *~; 9 | #X obj 25 24 inlet~; 10 | #X obj 25 160 outlet~; 11 | #X obj 90 48 inlet; 12 | #X connect 0 0 5 0; 13 | #X connect 1 0 2 0; 14 | #X connect 2 0 3 0; 15 | #X connect 3 0 0 1; 16 | #X connect 3 0 6 1; 17 | #X connect 4 0 0 0; 18 | #X connect 6 0 8 0; 19 | #X connect 7 0 6 0; 20 | #X connect 9 0 1 0; 21 | -------------------------------------------------------------------------------- /LV2/lv2/uri-map/uri-map.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix owl: . 3 | @prefix rdf: . 4 | @prefix rdfs: . 5 | @prefix umap: . 6 | 7 | 8 | a lv2:Feature ; 9 | owl:deprecated true ; 10 | rdfs:label "LV2 URI Map" ; 11 | rdfs:comment "A feature for mapping URIs to integers." ; 12 | rdfs:seeAlso , 13 | . 14 | 15 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/gui.link.pd: -------------------------------------------------------------------------------- 1 | #N canvas 508 186 287 158 10; 2 | #X msg 3 87 set \$1; 3 | #X obj 3 16 r \$2-sld-s; 4 | #X obj 3 37 s \$2-nbx-r; 5 | #X obj 3 66 r \$2-nbx-s; 6 | #X obj 3 108 s \$2-sld-r; 7 | #X obj 131 16 param.set \$1 \$2-nbx-s; 8 | #X msg 131 59 set \$1; 9 | #X obj 141 80 s \$2-nbx-r; 10 | #X obj 131 101 s \$2-sld-r; 11 | #X obj 53 87 s \$2; 12 | #X obj 131 37 param.get \$1 \$2; 13 | #X connect 0 0 4 0; 14 | #X connect 1 0 2 0; 15 | #X connect 3 0 0 0; 16 | #X connect 3 0 9 0; 17 | #X connect 6 0 7 0; 18 | #X connect 6 0 8 0; 19 | #X connect 10 0 6 0; 20 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/harmonic.fill.pd: -------------------------------------------------------------------------------- 1 | #N canvas 413 55 332 300 10; 2 | #X obj 25 109 list prepend cosinesum 2048 0; 3 | #X obj 25 131 list trim; 4 | #X obj 25 153 t b a; 5 | #X obj 25 65 bang; 6 | #X obj 25 86 array get \$0-values; 7 | #X msg 25 175 normalize 1; 8 | #X obj 25 21 array define \$0-values 10; 9 | #X obj 25 44 clone -s 1 9 harmonic.set \$2 \$0-values; 10 | #X obj 25 196 s \$1; 11 | #X connect 0 0 1 0; 12 | #X connect 1 0 2 0; 13 | #X connect 2 0 5 0; 14 | #X connect 2 1 8 0; 15 | #X connect 3 0 4 0; 16 | #X connect 4 0 0 0; 17 | #X connect 5 0 8 0; 18 | #X connect 7 0 3 0; 19 | -------------------------------------------------------------------------------- /Resources/Credits/CreditsVST: -------------------------------------------------------------------------------- 1 | Camomile is a free and open-source audio plugin with Pure Data embedded that offers to load and to control patches inside a digital audio workstation. 2 | 3 | Version: 1.0.6 4 | Author: Pierre Guillot 5 | Organizations: CICM | Université Paris 8 6 | Website: github.com/pierreguillot/camomile 7 | Credits: 8 | • Pure Data by Miller Puckette and others 9 | • libpd by the Peter Brinkmann, Dan Wilcox and others 10 | • JUCE by ROLI Ltd. 11 | • VST PlugIn Technology by Steinberg Media Technologies 12 | • MoodyCamel by Cameron Desrochers 13 | • Console icons by Gregor Cresnar 14 | -------------------------------------------------------------------------------- /Plugins/Examples/Bulgroz/param.get.pd: -------------------------------------------------------------------------------- 1 | #N canvas 582 337 222 276 10; 2 | #X obj 6 41 route \$1; 3 | #X obj 33 108 outlet; 4 | #X obj 51 151 symbol \$2; 5 | #X obj 6 239 send \$2; 6 | #X obj 6 216 spigot 0; 7 | #X obj 6 85 t f f; 8 | #X obj 51 172 sel \$2; 9 | #X obj 51 130 loadbang; 10 | #X obj 51 194 f 1; 11 | #X obj 6 19 receive param; 12 | #X obj 6 63 change -1e+37; 13 | #X connect 0 0 10 0; 14 | #X connect 2 0 6 0; 15 | #X connect 4 0 3 0; 16 | #X connect 5 0 4 0; 17 | #X connect 5 1 1 0; 18 | #X connect 6 0 8 0; 19 | #X connect 7 0 2 0; 20 | #X connect 8 0 4 1; 21 | #X connect 9 0 0 0; 22 | #X connect 10 0 5 0; 23 | -------------------------------------------------------------------------------- /Plugins/Examples/MiniMock/param.get.pd: -------------------------------------------------------------------------------- 1 | #N canvas 582 337 222 276 10; 2 | #X obj 6 41 route \$1; 3 | #X obj 33 108 outlet; 4 | #X obj 51 151 symbol \$2; 5 | #X obj 6 239 send \$2; 6 | #X obj 6 216 spigot 0; 7 | #X obj 6 85 t f f; 8 | #X obj 51 172 sel \$2; 9 | #X obj 51 130 loadbang; 10 | #X obj 51 194 f 1; 11 | #X obj 6 19 receive param; 12 | #X obj 6 63 change -1e+37; 13 | #X connect 0 0 10 0; 14 | #X connect 2 0 6 0; 15 | #X connect 4 0 3 0; 16 | #X connect 5 0 4 0; 17 | #X connect 5 1 1 0; 18 | #X connect 6 0 8 0; 19 | #X connect 7 0 2 0; 20 | #X connect 8 0 4 1; 21 | #X connect 9 0 0 0; 22 | #X connect 10 0 5 0; 23 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/param.get.pd: -------------------------------------------------------------------------------- 1 | #N canvas 582 337 222 276 10; 2 | #X obj 6 41 route \$1; 3 | #X obj 33 108 outlet; 4 | #X obj 51 151 symbol \$2; 5 | #X obj 6 239 send \$2; 6 | #X obj 6 216 spigot 0; 7 | #X obj 6 85 t f f; 8 | #X obj 51 172 sel \$2; 9 | #X obj 51 130 loadbang; 10 | #X obj 51 194 f 1; 11 | #X obj 6 19 receive param; 12 | #X obj 6 63 change -1e+37; 13 | #X connect 0 0 10 0; 14 | #X connect 2 0 6 0; 15 | #X connect 4 0 3 0; 16 | #X connect 5 0 4 0; 17 | #X connect 5 1 1 0; 18 | #X connect 6 0 8 0; 19 | #X connect 7 0 2 0; 20 | #X connect 8 0 4 1; 21 | #X connect 9 0 0 0; 22 | #X connect 10 0 5 0; 23 | -------------------------------------------------------------------------------- /Plugins/Examples/Castafiore/param.get.pd: -------------------------------------------------------------------------------- 1 | #N canvas 582 337 222 276 10; 2 | #X obj 6 41 route \$1; 3 | #X obj 33 108 outlet; 4 | #X obj 51 151 symbol \$2; 5 | #X obj 6 239 send \$2; 6 | #X obj 6 216 spigot 0; 7 | #X obj 6 85 t f f; 8 | #X obj 51 172 sel \$2; 9 | #X obj 51 130 loadbang; 10 | #X obj 51 194 f 1; 11 | #X obj 6 19 receive param; 12 | #X obj 6 63 change -1e+37; 13 | #X connect 0 0 10 0; 14 | #X connect 2 0 6 0; 15 | #X connect 4 0 3 0; 16 | #X connect 5 0 4 0; 17 | #X connect 5 1 1 0; 18 | #X connect 6 0 8 0; 19 | #X connect 7 0 2 0; 20 | #X connect 8 0 4 1; 21 | #X connect 9 0 0 0; 22 | #X connect 10 0 5 0; 23 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/harmonic.set.pd: -------------------------------------------------------------------------------- 1 | #N canvas 241 183 201 213 10; 2 | #X obj 11 33 change; 3 | #X obj 11 54 t b f; 4 | #X obj 38 75 / 100; 5 | #X obj 38 118 array set \$3; 6 | #X obj 82 12 loadbang; 7 | #X obj 82 54 - 1; 8 | #X obj 11 139 outlet; 9 | #X obj 11 12 r \$2-\$1; 10 | #X obj 82 33 f \$1; 11 | #X obj 82 75 sel 8; 12 | #X obj 82 96 f 9; 13 | #X connect 0 0 1 0; 14 | #X connect 1 0 6 0; 15 | #X connect 1 1 2 0; 16 | #X connect 2 0 3 0; 17 | #X connect 4 0 8 0; 18 | #X connect 5 0 9 0; 19 | #X connect 7 0 0 0; 20 | #X connect 8 0 5 0; 21 | #X connect 9 0 10 0; 22 | #X connect 9 1 3 1; 23 | #X connect 10 0 3 1; 24 | -------------------------------------------------------------------------------- /Resources/Credits/CreditsLV2: -------------------------------------------------------------------------------- 1 | Camomile is a free and open-source audio plugin with Pure Data embedded that offers to load and to control patches inside a digital audio workstation. 2 | 3 | Version: 1.0.6 4 | Author: Pierre Guillot 5 | Organizations: CICM | Université Paris 8 6 | Website: github.com/pierreguillot/camomile 7 | Credits: 8 | • Pure Data by Miller Puckette and others 9 | • libpd by the Peter Brinkmann, Dan Wilcox and others 10 | • JUCE by ROLI Ltd. 11 | • LV2 PlugIn Technology developed by Steve Harris, David Robillard and others 12 | • JUCE LV2 support based on Filipe Coelho JUCE LV2 integration 13 | • MoodyCamel by Cameron Desrochers 14 | • Console icons by Gregor Cresnar 15 | -------------------------------------------------------------------------------- /LV2/lv2/urid/urid.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix owl: . 3 | @prefix rdfs: . 4 | @prefix urid: . 5 | 6 | 7 | a owl:Ontology ; 8 | rdfs:label "LV2 URID" ; 9 | rdfs:comment "Features for mapping URIs to and from integers." ; 10 | rdfs:seeAlso , 11 | . 12 | 13 | urid:map 14 | a lv2:Feature ; 15 | rdfs:label "map" ; 16 | rdfs:comment "A feature to map URI strings to integer URIDs." . 17 | 18 | urid:unmap 19 | a lv2:Feature ; 20 | rdfs:label "unmap" ; 21 | rdfs:comment "A feature to unmap URIDs back to strings." . 22 | 23 | -------------------------------------------------------------------------------- /Plugins/Examples/MiniMock/param.set.pd: -------------------------------------------------------------------------------- 1 | #N canvas 835 417 259 354 10; 2 | #X obj 26 28 inlet; 3 | #X obj 26 288 s camomile; 4 | #X obj 26 240 pack f \$1; 5 | #X obj 26 170 t f b; 6 | #X obj 58 192 f \$1; 7 | #X obj 58 214 s camo.param.change; 8 | #X msg 26 264 param set \$2 \$1; 9 | #X obj 124 73 symbol \$2; 10 | #X obj 71 140 spigot 0; 11 | #X obj 124 96 sel \$2; 12 | #X obj 124 50 loadbang; 13 | #X obj 124 118 f 1; 14 | #X obj 71 28 receive \$2; 15 | #X connect 0 0 3 0; 16 | #X connect 2 0 6 0; 17 | #X connect 3 0 2 0; 18 | #X connect 3 1 4 0; 19 | #X connect 4 0 5 0; 20 | #X connect 6 0 1 0; 21 | #X connect 7 0 9 0; 22 | #X connect 8 0 3 0; 23 | #X connect 9 0 11 0; 24 | #X connect 10 0 7 0; 25 | #X connect 11 0 8 1; 26 | #X connect 12 0 8 0; 27 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/param.set.pd: -------------------------------------------------------------------------------- 1 | #N canvas 835 417 259 354 10; 2 | #X obj 26 28 inlet; 3 | #X obj 26 288 s camomile; 4 | #X obj 26 240 pack f \$1; 5 | #X obj 26 170 t f b; 6 | #X obj 53 192 f \$1; 7 | #X obj 53 214 s camo.param.change; 8 | #X msg 26 264 param set \$2 \$1; 9 | #X obj 116 73 symbol \$2; 10 | #X obj 71 140 spigot 0; 11 | #X obj 116 96 sel \$2; 12 | #X obj 116 50 loadbang; 13 | #X obj 116 118 f 1; 14 | #X obj 71 28 receive \$2; 15 | #X obj 26 49 spigot \$1; 16 | #X connect 0 0 13 0; 17 | #X connect 2 0 6 0; 18 | #X connect 3 0 2 0; 19 | #X connect 3 1 4 0; 20 | #X connect 4 0 5 0; 21 | #X connect 6 0 1 0; 22 | #X connect 7 0 9 0; 23 | #X connect 8 0 3 0; 24 | #X connect 9 0 11 0; 25 | #X connect 10 0 7 0; 26 | #X connect 11 0 8 1; 27 | #X connect 12 0 8 0; 28 | #X connect 13 0 3 0; 29 | -------------------------------------------------------------------------------- /Plugins/Examples/Bulgroz/param.set.pd: -------------------------------------------------------------------------------- 1 | #N canvas 835 417 259 354 10; 2 | #X obj 26 28 inlet; 3 | #X obj 26 288 s camomile; 4 | #X obj 26 240 pack f \$1; 5 | #X obj 26 170 t f b; 6 | #X obj 53 192 f \$1; 7 | #X obj 53 214 s camo.param.change; 8 | #X msg 26 264 param set \$2 \$1; 9 | #X obj 116 73 symbol \$2; 10 | #X obj 71 140 spigot 0; 11 | #X obj 116 96 sel \$2; 12 | #X obj 116 50 loadbang; 13 | #X obj 116 118 f 1; 14 | #X obj 71 28 receive \$2; 15 | #X obj 26 49 spigot \$1; 16 | #X connect 0 0 13 0; 17 | #X connect 2 0 6 0; 18 | #X connect 3 0 2 0; 19 | #X connect 3 1 4 0; 20 | #X connect 4 0 5 0; 21 | #X connect 6 0 1 0; 22 | #X connect 7 0 9 0; 23 | #X connect 8 0 3 0; 24 | #X connect 9 0 11 0; 25 | #X connect 10 0 7 0; 26 | #X connect 11 0 8 1; 27 | #X connect 12 0 8 0; 28 | #X connect 13 0 3 0; 29 | -------------------------------------------------------------------------------- /Plugins/Examples/Castafiore/param.set.pd: -------------------------------------------------------------------------------- 1 | #N canvas 835 417 259 354 10; 2 | #X obj 26 28 inlet; 3 | #X obj 26 288 s camomile; 4 | #X obj 26 240 pack f \$1; 5 | #X obj 26 170 t f b; 6 | #X obj 53 192 f \$1; 7 | #X obj 53 214 s camo.param.change; 8 | #X msg 26 264 param set \$2 \$1; 9 | #X obj 116 73 symbol \$2; 10 | #X obj 71 140 spigot 0; 11 | #X obj 116 96 sel \$2; 12 | #X obj 116 50 loadbang; 13 | #X obj 116 118 f 1; 14 | #X obj 71 28 receive \$2; 15 | #X obj 26 49 spigot \$1; 16 | #X connect 0 0 13 0; 17 | #X connect 2 0 6 0; 18 | #X connect 3 0 2 0; 19 | #X connect 3 1 4 0; 20 | #X connect 4 0 5 0; 21 | #X connect 6 0 1 0; 22 | #X connect 7 0 9 0; 23 | #X connect 8 0 3 0; 24 | #X connect 9 0 11 0; 25 | #X connect 10 0 7 0; 26 | #X connect 11 0 8 1; 27 | #X connect 12 0 8 0; 28 | #X connect 13 0 3 0; 29 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/midi.ctrl.link.pd: -------------------------------------------------------------------------------- 1 | #N canvas 508 186 382 306 10; 2 | #X obj 59 19 ctlin \$1; 3 | #X obj 78 191 / 1; 4 | #X text 155 21 \$1 - MIDI ctrl voice number; 5 | #X obj 59 40 t b f b; 6 | #X obj 98 85 pack f \$2; 7 | #X msg 98 106 param change \$2 \$1; 8 | #X obj 98 127 s camomile; 9 | #X msg 98 61 1; 10 | #X msg 59 61 0; 11 | #X text 155 37 \$2 - Parameter voice number; 12 | #X text 155 53 \$3 - Parameter name & GUI; 13 | #X obj 30 126 loadbang; 14 | #X obj 30 167 moses 1e-07; 15 | #X obj 30 147 f \$4; 16 | #X obj 78 215 s \$3-sld-r; 17 | #X connect 1 0 14 0; 18 | #X connect 3 0 8 0; 19 | #X connect 3 1 1 0; 20 | #X connect 3 2 7 0; 21 | #X connect 4 0 5 0; 22 | #X connect 5 0 6 0; 23 | #X connect 7 0 4 0; 24 | #X connect 8 0 4 0; 25 | #X connect 11 0 13 0; 26 | #X connect 12 1 1 1; 27 | #X connect 13 0 12 0; 28 | -------------------------------------------------------------------------------- /LV2/lv2/worker/worker.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix owl: . 3 | @prefix rdf: . 4 | @prefix rdfs: . 5 | @prefix work: . 6 | @prefix xsd: . 7 | 8 | 9 | a owl:Ontology ; 10 | rdfs:label "LV2 Worker" ; 11 | rdfs:comment "Support for doing non-realtime work in plugins." ; 12 | owl:imports ; 13 | rdfs:seeAlso , 14 | . 15 | 16 | work:interface 17 | a lv2:ExtensionData ; 18 | rdfs:label "work interface" ; 19 | rdfs:comment "The work interface provided by a plugin." . 20 | 21 | work:schedule 22 | a lv2:Feature ; 23 | rdfs:label "work schedule" ; 24 | rdfs:comment "The work scheduling feature provided by a host." . 25 | 26 | -------------------------------------------------------------------------------- /LV2/lv2/dynmanifest/dynmanifest.ttl: -------------------------------------------------------------------------------- 1 | @prefix dman: . 2 | @prefix lv2: . 3 | @prefix owl: . 4 | @prefix rdf: . 5 | @prefix rdfs: . 6 | @prefix xsd: . 7 | 8 | 9 | a owl:Ontology ; 10 | rdfs:label "LV2 Dyn Manifest" ; 11 | rdfs:comment "Support for dynamic manifest data generation." ; 12 | rdfs:seeAlso , 13 | . 14 | 15 | dman:DynManifest 16 | a rdfs:Class ; 17 | rdfs:label "Dynamic Manifest" ; 18 | rdfs:subClassOf [ 19 | a owl:Restriction ; 20 | owl:onProperty lv2:binary ; 21 | owl:minCardinality 1 ; 22 | rdfs:comment "A DynManifest MUST have at least one lv2:binary." 23 | ] ; 24 | rdfs:comment "Dynamic manifest for an LV2 binary." . 25 | 26 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/overdrive~.pd: -------------------------------------------------------------------------------- 1 | #N canvas 508 186 217 353 10; 2 | #X obj 24 97 clip~ -1 1; 3 | #X obj 24 199 -~; 4 | #X obj 45 173 /~ 3; 5 | #X obj 45 126 *~; 6 | #X obj 45 151 *~; 7 | #X obj 24 276 outlet~; 8 | #X obj 24 24 inlet~; 9 | #X obj 119 68 / 100; 10 | #X obj 119 90 pack f 20; 11 | #X obj 119 112 line~; 12 | #X obj 24 219 *~; 13 | #X obj 119 134 *~ -1; 14 | #X obj 119 156 +~ 1; 15 | #X obj 104 179 *~; 16 | #X obj 24 68 *~ 2.56; 17 | #X obj 119 46 inlet; 18 | #X connect 0 0 1 0; 19 | #X connect 0 0 3 0; 20 | #X connect 0 0 3 1; 21 | #X connect 0 0 4 1; 22 | #X connect 1 0 10 0; 23 | #X connect 2 0 1 1; 24 | #X connect 3 0 4 0; 25 | #X connect 4 0 2 0; 26 | #X connect 6 0 13 0; 27 | #X connect 6 0 14 0; 28 | #X connect 7 0 8 0; 29 | #X connect 8 0 9 0; 30 | #X connect 9 0 10 1; 31 | #X connect 9 0 11 0; 32 | #X connect 10 0 5 0; 33 | #X connect 11 0 12 0; 34 | #X connect 12 0 13 1; 35 | #X connect 13 0 5 0; 36 | #X connect 14 0 0 0; 37 | #X connect 15 0 7 0; 38 | -------------------------------------------------------------------------------- /Source/PluginLookAndFeel.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015-2018 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #pragma once 8 | 9 | #include 10 | 11 | class JUCE_API CamoLookAndFeel : public LookAndFeel_V4 12 | { 13 | public: 14 | CamoLookAndFeel(); 15 | ~CamoLookAndFeel(); 16 | 17 | void drawPopupMenuBackground (Graphics&, int width, int height) override; 18 | Font getPopupMenuFont() override; 19 | Font getTabButtonFont(TabBarButton&, float height) override; 20 | void drawLabel (Graphics& g, Label& label) override; 21 | 22 | static Font getDefaultFont(); 23 | static Font getFont(const std::string& name); 24 | static Image const& getImage(); 25 | static String const& getDescription(); 26 | 27 | private: 28 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CamoLookAndFeel) 29 | }; 30 | 31 | 32 | -------------------------------------------------------------------------------- /Source/PluginConfig.h: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015-2018 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #pragma once 8 | 9 | #undef JucePlugin_Name 10 | #undef JucePlugin_PluginCode 11 | #undef JucePlugin_Desc 12 | #undef JucePlugin_Manufacturer 13 | #undef JucePlugin_LV2URI 14 | 15 | #include "PluginEnvironment.h" 16 | #define JUCE_DISPLAY_SPLASH_SCREEN 0 17 | #define JUCE_REPORT_APP_USAGE 0 18 | 19 | #define JucePlugin_Name CamomileEnvironment::getPluginNameUTF8() 20 | #define JucePlugin_PluginCode CamomileEnvironment::getPluginCode() 21 | #define JucePlugin_Desc CamomileEnvironment::getPluginDescriptionUTF8() 22 | #define JucePlugin_Manufacturer CamomileEnvironment::getPluginManufacturerUTF8() 23 | #define JucePlugin_LV2URI (juce::String("urn:Camomile:") + juce::String(JucePlugin_Name)).toUTF8() 24 | 25 | namespace ProjectInfo 26 | { 27 | const char* const projectName = JucePlugin_Name; 28 | const char* const companyName = JucePlugin_Manufacturer; 29 | const char* const versionString = JucePlugin_VersionString; 30 | const int versionNumber = 0x1008; 31 | } 32 | -------------------------------------------------------------------------------- /Source/Pd/x_libpd_extra_utils.h: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015-2018 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #ifndef __X_LIBPD_EXTRA_UTILS_H__ 8 | #define __X_LIBPD_EXTRA_UTILS_H__ 9 | 10 | #ifdef __cplusplus 11 | extern "C" 12 | { 13 | #endif 14 | 15 | #include 16 | void* libpd_create_canvas(const char* name, const char* path); 17 | 18 | char const* libpd_get_object_class_name(void* ptr); 19 | void libpd_get_object_text(void* ptr, char** text, int* size); 20 | void libpd_get_object_bounds(void* patch, void* ptr, int* x, int* y, int* w, int* h); 21 | 22 | 23 | char const* libpd_array_get_name(void* ptr); 24 | void libpd_array_get_scale(char const* name, float* min, float* max); 25 | int libpd_array_get_style(char const* name); 26 | 27 | unsigned int libpd_iemgui_get_background_color(void* ptr); 28 | unsigned int libpd_iemgui_get_foreground_color(void* ptr); 29 | 30 | float libpd_get_canvas_font_height(t_canvas* cnv); 31 | 32 | 33 | #ifdef __cplusplus 34 | } 35 | #endif 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /LV2/lv2/resize-port/resize-port.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix owl: . 3 | @prefix rdf: . 4 | @prefix rdfs: . 5 | @prefix rsz: . 6 | @prefix xsd: . 7 | 8 | 9 | a owl:Ontology ; 10 | rdfs:label "LV2 Resize Port" ; 11 | rdfs:comment "Dynamically sized LV2 port buffers." ; 12 | rdfs:seeAlso , 13 | . 14 | 15 | rsz:resize 16 | a lv2:Feature ; 17 | rdfs:label "resize" ; 18 | rdfs:comment "A feature for resizing output port buffers." . 19 | 20 | rsz:asLargeAs 21 | a rdf:Property , 22 | owl:DatatypeProperty ; 23 | rdfs:domain lv2:Port ; 24 | rdfs:range lv2:Symbol ; 25 | rdfs:label "as large as" ; 26 | rdfs:comment "Port that this port must have at least as much buffer space as." . 27 | 28 | rsz:minimumSize 29 | a rdf:Property , 30 | owl:DatatypeProperty , 31 | owl:FunctionalProperty ; 32 | rdfs:domain lv2:Port ; 33 | rdfs:range xsd:nonNegativeInteger ; 34 | rdfs:label "minimum size" ; 35 | rdfs:comment "Minimum buffer size required by a port, in bytes." . 36 | 37 | -------------------------------------------------------------------------------- /Source/PluginEditorComponents.h: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015-2018 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #pragma once 8 | 9 | #include "PluginProcessor.h" 10 | 11 | ////////////////////////////////////////////////////////////////////////////////////////////// 12 | // BUTTON // 13 | ////////////////////////////////////////////////////////////////////////////////////////////// 14 | 15 | //! @brief The flower button 16 | //! The only button of the editor that's not a Pd object. 17 | class CamomileEditorButton : public Button 18 | { 19 | public: 20 | CamomileEditorButton(CamomileAudioProcessor& processor); 21 | ~CamomileEditorButton(); 22 | void paintButton(Graphics& g, bool over, bool down) final {}; 23 | void buttonStateChanged() final; 24 | void clicked() final; 25 | private: 26 | CamomileAudioProcessor& m_processor; 27 | DrawableImage m_center; 28 | DrawableImage m_petals; 29 | std::unique_ptr m_window; 30 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CamomileEditorButton) 31 | }; 32 | 33 | -------------------------------------------------------------------------------- /LV2/lv2/log/log.ttl: -------------------------------------------------------------------------------- 1 | @prefix log: . 2 | @prefix lv2: . 3 | @prefix owl: . 4 | @prefix rdf: . 5 | @prefix rdfs: . 6 | @prefix xsd: . 7 | 8 | 9 | a owl:Ontology ; 10 | rdfs:label "LV2 Log" ; 11 | rdfs:comment "A feature for writing log messages." ; 12 | rdfs:seeAlso , 13 | . 14 | 15 | log:Entry 16 | a rdfs:Class ; 17 | rdfs:label "Entry" ; 18 | rdfs:comment "A log entry." . 19 | 20 | log:Error 21 | a rdfs:Class ; 22 | rdfs:label "Error" ; 23 | rdfs:subClassOf log:Entry ; 24 | rdfs:comment "An error message." . 25 | 26 | log:Note 27 | a rdfs:Class ; 28 | rdfs:label "Note" ; 29 | rdfs:subClassOf log:Entry ; 30 | rdfs:comment "An informative message." . 31 | 32 | log:Warning 33 | a rdfs:Class ; 34 | rdfs:label "Warning" ; 35 | rdfs:subClassOf log:Entry ; 36 | rdfs:comment "A warning message." . 37 | 38 | log:Trace 39 | a rdfs:Class ; 40 | rdfs:label "Trace" ; 41 | rdfs:subClassOf log:Entry ; 42 | rdfs:comment "A debugging trace message." . 43 | 44 | log:log 45 | a lv2:Feature ; 46 | rdfs:label "log" ; 47 | rdfs:comment "Logging feature." . 48 | 49 | -------------------------------------------------------------------------------- /LV2/lv2/instance-access/instance-access.h: -------------------------------------------------------------------------------- 1 | /* 2 | LV2 Instance Access Extension 3 | Copyright 2008-2016 David Robillard 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted, provided that the above 7 | copyright notice and this permission notice appear in all copies. 8 | 9 | THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 | */ 17 | 18 | /** 19 | @defgroup instance-access Instance Access 20 | @ingroup lv2 21 | 22 | Access to the LV2_Handle of a plugin for UIs; see 23 | for details. 24 | 25 | @{ 26 | */ 27 | 28 | #ifndef LV2_INSTANCE_ACCESS_H 29 | #define LV2_INSTANCE_ACCESS_H 30 | 31 | #define LV2_INSTANCE_ACCESS_URI "http://lv2plug.in/ns/ext/instance-access" ///< http://lv2plug.in/ns/ext/instance-access 32 | 33 | #endif /* LV2_INSTANCE_ACCESS_H */ 34 | 35 | /** 36 | @} 37 | */ 38 | -------------------------------------------------------------------------------- /LV2/lv2/core/people.ttl: -------------------------------------------------------------------------------- 1 | @prefix foaf: . 2 | @prefix meta: . 3 | @prefix rdfs: . 4 | 5 | 6 | a foaf:Person ; 7 | foaf:name "David Robillard" ; 8 | foaf:mbox ; 9 | rdfs:seeAlso . 10 | 11 | 12 | a foaf:Person ; 13 | foaf:name "Steve Harris" ; 14 | foaf:mbox ; 15 | rdfs:seeAlso . 16 | 17 | meta:larsl 18 | a foaf:Person ; 19 | foaf:name "Lars Luthman" ; 20 | foaf:mbox . 21 | 22 | meta:gabrbedd 23 | a foaf:Person ; 24 | foaf:name "Gabriel M. Beddingfield" ; 25 | foaf:mbox . 26 | 27 | meta:daste 28 | a foaf:Person ; 29 | foaf:name """Stefano D'Angelo""" ; 30 | foaf:mbox . 31 | 32 | meta:kfoltman 33 | a foaf:Person ; 34 | foaf:name "Krzysztof Foltman" ; 35 | foaf:mbox . 36 | 37 | meta:paniq 38 | a foaf:Person ; 39 | foaf:name "Leonard Ritter" ; 40 | foaf:mbox . 41 | 42 | meta:harry 43 | a foaf:Person ; 44 | foaf:name "Harry van Haaren" ; 45 | foaf:mbox . 46 | 47 | meta:bmwiedemann 48 | a foaf:Person ; 49 | foaf:name "Bernhard M. Wiedemann" ; 50 | foaf:mbox . 51 | 52 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 1. **Please provide an explicit title to the issue**. 2 | 3 | 4 | > Just by reading the title, someone should be able to tell if the issue is about a critical bug, a minor bug or a feature request or if the issue is specific to one operating system, etc. **Keep in mind that you are not the only one looking for an answer!** Perhaps this issue could help somebody else, an explicit title will help him to find this issue. 5 | 6 | 2. **Describe your environment** 7 | - **OS**: for example Windows 10 and/or Windows 7, MacOS 10.13.3, Ubuntu 17.10, etc. 8 | - **DAW**: for example Reaper 5.76.0 - 64bits and/or Ableton Live 9 - 32 bits, FL Studio v 12.5.1 - 64bits, etc. 9 | - **Plugin**: for example VST2/VST3/AU - v1.0.3 and/or VST3 - v1.0.1, VST2 - v1.0.2, etc. 10 | - **Audio**: for example 44100 Hz - 64 samples and/or 96000 Hz - 256 samples, 48000 Hz - 512 samples, etc. 11 | - **etc.** 12 | 13 | 14 | > Keep in mind that it's preferable that you provide all the information you have than to wait an answer that will ask for these information. 15 | 16 | 3. **Describe the problem or the feature request** 17 | - Steps to reproduce 18 | - Observed Results 19 | - Expected Results 20 | - Advantages of the feature 21 | - Possible problems 22 | - etc. 23 | 24 | 25 | > Feel free to provide your patches, your DAW project, screenshots and any document that could help. 26 | -------------------------------------------------------------------------------- /LV2/lv2/options/options.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix opts: . 3 | @prefix owl: . 4 | @prefix rdf: . 5 | @prefix rdfs: . 6 | @prefix xsd: . 7 | 8 | 9 | a owl:Ontology ; 10 | rdfs:label "LV2 Options" ; 11 | rdfs:comment "Runtime options for LV2 plugins and UIs." ; 12 | rdfs:seeAlso , 13 | . 14 | 15 | opts:Option 16 | a rdfs:Class ; 17 | rdfs:label "Option" ; 18 | rdfs:subClassOf rdf:Property ; 19 | rdfs:comment "A value for a static option passed to an instance." . 20 | 21 | opts:interface 22 | a lv2:ExtensionData ; 23 | rdfs:label "interface" ; 24 | rdfs:comment "An interface for dynamically setting and getting options." . 25 | 26 | opts:options 27 | a lv2:Feature ; 28 | rdfs:label "options" ; 29 | rdfs:comment "The feature used to provide options to an instance." . 30 | 31 | opts:requiredOption 32 | a rdf:Property , 33 | owl:ObjectProperty ; 34 | rdfs:range rdf:Property ; 35 | rdfs:label "required option" ; 36 | rdfs:comment "An option required by the instance to function at all." . 37 | 38 | opts:supportedOption 39 | a rdf:Property , 40 | owl:ObjectProperty ; 41 | rdfs:range rdf:Property ; 42 | rdfs:label "supported option" ; 43 | rdfs:comment "An option supported or by the instance." . 44 | 45 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/program.manager.pd: -------------------------------------------------------------------------------- 1 | #N canvas 419 254 322 512 10; 2 | #X obj 17 17 r program; 3 | #X obj 17 458 s camomile; 4 | #X obj 17 58 t f f, f 6; 5 | #X obj 17 78 text size \$1; 6 | #X obj 17 99 t f b, f 7; 7 | #X obj 17 120 until; 8 | #X obj 56 120 f 0; 9 | #X obj 17 141 f, f 7; 10 | #X obj 68 141 + 1; 11 | #X obj 44 394 s param; 12 | #X obj 17 352 pack f f, f 21; 13 | #X obj 56 184 swap, f 5; 14 | #X obj 56 207 text get \$1, f 14; 15 | #X obj 17 330 spigot, f 7; 16 | #X obj 17 38 - 1; 17 | #X obj 56 292 f 0; 18 | #X obj 17 373 t l l; 19 | #X obj 17 183 + 1; 20 | #X obj 125 280 t b f; 21 | #X obj 125 301 f 1; 22 | #X obj 17 162 t f f, f 7; 23 | #X msg 17 414 param change \$1 1 \, param set \$1 \$2 \, param change 24 | \$1 0, f 19; 25 | #X obj 56 250 route symbol; 26 | #X obj 56 271 bang; 27 | #X connect 0 0 14 0; 28 | #X connect 2 0 3 0; 29 | #X connect 2 1 11 1; 30 | #X connect 3 0 4 0; 31 | #X connect 4 0 5 0; 32 | #X connect 4 1 6 0; 33 | #X connect 5 0 7 0; 34 | #X connect 6 0 7 1; 35 | #X connect 7 0 8 0; 36 | #X connect 7 0 20 0; 37 | #X connect 8 0 7 1; 38 | #X connect 10 0 16 0; 39 | #X connect 11 0 12 0; 40 | #X connect 11 1 12 1; 41 | #X connect 12 0 22 0; 42 | #X connect 13 0 10 0; 43 | #X connect 14 0 2 0; 44 | #X connect 15 0 13 1; 45 | #X connect 16 0 21 0; 46 | #X connect 16 1 9 0; 47 | #X connect 17 0 13 0; 48 | #X connect 18 0 19 0; 49 | #X connect 18 1 10 1; 50 | #X connect 19 0 13 1; 51 | #X connect 20 0 17 0; 52 | #X connect 20 1 11 0; 53 | #X connect 21 0 1 0; 54 | #X connect 22 0 23 0; 55 | #X connect 22 1 18 0; 56 | #X connect 23 0 15 0; 57 | -------------------------------------------------------------------------------- /LV2/lv2/morph/morph.ttl: -------------------------------------------------------------------------------- 1 | @prefix doap: . 2 | @prefix foaf: . 3 | @prefix lv2: . 4 | @prefix morph: . 5 | @prefix opts: . 6 | @prefix owl: . 7 | @prefix rdf: . 8 | @prefix rdfs: . 9 | @prefix xsd: . 10 | 11 | 12 | a owl:Ontology ; 13 | rdfs:label "LV2 Morph" ; 14 | rdfs:comment "Ports that can dynamically change type." ; 15 | rdfs:seeAlso , 16 | . 17 | 18 | morph:MorphPort 19 | a rdfs:Class , 20 | owl:Class ; 21 | rdfs:subClassOf lv2:Port ; 22 | rdfs:label "Morph Port" ; 23 | rdfs:comment "A port which can be switched to another type." . 24 | 25 | morph:AutoMorphPort 26 | a rdfs:Class , 27 | owl:Class ; 28 | rdfs:subClassOf lv2:Port ; 29 | rdfs:label "Auto Morph Port" ; 30 | rdfs:comment "A port that can change its type based on that of another." . 31 | 32 | morph:supportsType 33 | a rdf:Property , 34 | owl:ObjectProperty ; 35 | rdfs:domain morph:MorphPort ; 36 | rdfs:label "supports type" ; 37 | rdfs:comment "A type that a port supports being switched to." . 38 | 39 | morph:currentType 40 | a rdf:Property , 41 | opts:Option , 42 | owl:ObjectProperty ; 43 | rdfs:domain morph:MorphPort ; 44 | rdfs:label "current type" ; 45 | rdfs:comment "The currently active type of the port." . 46 | 47 | -------------------------------------------------------------------------------- /Source/PluginEditor.h: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015-2018 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #pragma once 8 | 9 | #include "PluginProcessor.h" 10 | #include "PluginEditorInteraction.h" 11 | #include "PluginEditorComponents.h" 12 | #include "PluginEditorObject.hpp" 13 | 14 | class CamomileEditor 15 | : public AudioProcessorEditor 16 | , protected Timer 17 | , public CamomileEditorInteractionManager 18 | { 19 | public: 20 | CamomileEditor(CamomileAudioProcessor&); 21 | ~CamomileEditor(); 22 | void paint(Graphics&) final; 23 | void timerCallback() final; 24 | void resized() override; 25 | ////////////////////////////////////////////////////////////////////////////////////////// 26 | bool keyPressed(const KeyPress& key) final; 27 | bool keyStateChanged(bool isKeyDown) final; 28 | void modifierKeysChanged(const ModifierKeys& modifiers) final; 29 | 30 | void guiResize() final; 31 | void guiRedraw() final; 32 | 33 | void reloadPatch(); 34 | private: 35 | 36 | using object_uptr = std::unique_ptr; 37 | using label_uptr = std::unique_ptr; 38 | using object_pair = std::pair; 39 | 40 | CamomileAudioProcessor& m_processor; 41 | std::unique_ptr m_patch; 42 | CamomileEditorButton m_button; 43 | DrawableImage m_image; 44 | 45 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CamomileEditor) 46 | }; 47 | -------------------------------------------------------------------------------- /Source/PluginFileWatcher.h: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015-2018 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #pragma once 8 | 9 | #include 10 | #include "PluginConfig.h" 11 | 12 | // ======================================================================================== // 13 | // FILE WATCHER // 14 | // ======================================================================================== // 15 | 16 | class CamomileFileWatcher : public Timer 17 | { 18 | public: 19 | CamomileFileWatcher() : 20 | m_file(CamomileEnvironment::getPatchPath() + File::getSeparatorString() + CamomileEnvironment::getPatchName()) 21 | { 22 | if(CamomileEnvironment::wantsAutoReload()) 23 | { 24 | if(m_file.exists()) 25 | { 26 | m_time = m_file.getLastModificationTime(); 27 | startTimer(100); 28 | } 29 | } 30 | } 31 | 32 | virtual ~CamomileFileWatcher() {} 33 | 34 | void timerCallback() 35 | { 36 | if(m_file.exists()) 37 | { 38 | Time const ntime = m_file.getLastModificationTime(); 39 | if(ntime != m_time) 40 | { 41 | m_time = ntime; 42 | fileChanged(); 43 | } 44 | } 45 | } 46 | 47 | virtual void fileChanged() = 0; 48 | 49 | private: 50 | File const m_file; 51 | Time m_time; 52 | }; 53 | 54 | -------------------------------------------------------------------------------- /Plugins/Examples/Bulgroz/param.change.pd: -------------------------------------------------------------------------------- 1 | #N canvas 553 70 196 339 10; 2 | #X obj 55 43 r gui; 3 | #X obj 55 65 route mouse; 4 | #X obj 43 289 s camomile; 5 | #X obj 43 242 pack f f, f 18; 6 | #X msg 43 265 param change \$1 \$2; 7 | #X obj 92 159 t b f, f 8; 8 | #X obj 55 131 t b f, f 16; 9 | #X obj 16 183 t b f; 10 | #X msg 92 109 0; 11 | #X obj 16 18 r camo.param.change; 12 | #X msg 55 109 1; 13 | #N canvas 0 23 156 140 once 0; 14 | #X obj 15 84 t f b, f 8; 15 | #X obj 78 84 f 0; 16 | #X obj 15 19 inlet; 17 | #X obj 60 19 inlet; 18 | #X obj 15 106 outlet; 19 | #X obj 60 41 f 1; 20 | #X obj 15 62 spigot 0; 21 | #X connect 0 0 4 0; 22 | #X connect 0 1 1 0; 23 | #X connect 1 0 6 1; 24 | #X connect 2 0 6 0; 25 | #X connect 3 0 5 0; 26 | #X connect 5 0 6 1; 27 | #X connect 6 0 0 0; 28 | #X restore 16 159 pd once; 29 | #N canvas 0 23 156 140 once 0; 30 | #X obj 89 69 f 0; 31 | #X obj 15 19 inlet; 32 | #X obj 60 19 inlet; 33 | #X obj 15 106 outlet; 34 | #X obj 60 41 f 1; 35 | #X obj 15 62 spigot 0; 36 | #X obj 15 84 t b b, f 8; 37 | #X connect 0 0 5 1; 38 | #X connect 1 0 5 0; 39 | #X connect 2 0 4 0; 40 | #X connect 4 0 5 1; 41 | #X connect 5 0 6 0; 42 | #X connect 6 0 3 0; 43 | #X connect 6 1 0 0; 44 | #X restore 92 211 pd once; 45 | #X obj 55 87 sel 1 0, f 13; 46 | #X connect 0 0 1 0; 47 | #X connect 1 0 13 0; 48 | #X connect 3 0 4 0; 49 | #X connect 4 0 2 0; 50 | #X connect 5 0 12 0; 51 | #X connect 5 1 3 1; 52 | #X connect 6 0 11 1; 53 | #X connect 6 1 3 1; 54 | #X connect 7 0 12 1; 55 | #X connect 7 1 3 0; 56 | #X connect 8 0 5 0; 57 | #X connect 9 0 11 0; 58 | #X connect 10 0 6 0; 59 | #X connect 11 0 7 0; 60 | #X connect 12 0 3 0; 61 | #X connect 13 0 10 0; 62 | #X connect 13 1 8 0; 63 | -------------------------------------------------------------------------------- /Plugins/Examples/AlmondOrgan/param.change.pd: -------------------------------------------------------------------------------- 1 | #N canvas 553 70 196 339 10; 2 | #X obj 55 43 r gui; 3 | #X obj 55 65 route mouse; 4 | #X obj 43 289 s camomile; 5 | #X obj 43 242 pack f f, f 18; 6 | #X msg 43 265 param change \$1 \$2; 7 | #X obj 92 159 t b f, f 8; 8 | #X obj 55 131 t b f, f 16; 9 | #X obj 16 183 t b f; 10 | #X msg 92 109 0; 11 | #X obj 16 18 r camo.param.change; 12 | #X msg 55 109 1; 13 | #N canvas 0 23 156 140 once 0; 14 | #X obj 15 84 t f b, f 8; 15 | #X obj 78 84 f 0; 16 | #X obj 15 19 inlet; 17 | #X obj 60 19 inlet; 18 | #X obj 15 106 outlet; 19 | #X obj 60 41 f 1; 20 | #X obj 15 62 spigot 0; 21 | #X connect 0 0 4 0; 22 | #X connect 0 1 1 0; 23 | #X connect 1 0 6 1; 24 | #X connect 2 0 6 0; 25 | #X connect 3 0 5 0; 26 | #X connect 5 0 6 1; 27 | #X connect 6 0 0 0; 28 | #X restore 16 159 pd once; 29 | #N canvas 0 23 156 140 once 0; 30 | #X obj 89 69 f 0; 31 | #X obj 15 19 inlet; 32 | #X obj 60 19 inlet; 33 | #X obj 15 106 outlet; 34 | #X obj 60 41 f 1; 35 | #X obj 15 62 spigot 0; 36 | #X obj 15 84 t b b, f 8; 37 | #X connect 0 0 5 1; 38 | #X connect 1 0 5 0; 39 | #X connect 2 0 4 0; 40 | #X connect 4 0 5 1; 41 | #X connect 5 0 6 0; 42 | #X connect 6 0 3 0; 43 | #X connect 6 1 0 0; 44 | #X restore 92 211 pd once; 45 | #X obj 55 87 sel 1 0, f 13; 46 | #X connect 0 0 1 0; 47 | #X connect 1 0 13 0; 48 | #X connect 3 0 4 0; 49 | #X connect 4 0 2 0; 50 | #X connect 5 0 12 0; 51 | #X connect 5 1 3 1; 52 | #X connect 6 0 11 1; 53 | #X connect 6 1 3 1; 54 | #X connect 7 0 12 1; 55 | #X connect 7 1 3 0; 56 | #X connect 8 0 5 0; 57 | #X connect 9 0 11 0; 58 | #X connect 10 0 6 0; 59 | #X connect 11 0 7 0; 60 | #X connect 12 0 3 0; 61 | #X connect 13 0 10 0; 62 | #X connect 13 1 8 0; 63 | -------------------------------------------------------------------------------- /Plugins/Examples/Castafiore/param.change.pd: -------------------------------------------------------------------------------- 1 | #N canvas 553 70 196 339 10; 2 | #X obj 55 43 r gui; 3 | #X obj 55 65 route mouse; 4 | #X obj 43 289 s camomile; 5 | #X obj 43 242 pack f f, f 18; 6 | #X msg 43 265 param change \$1 \$2; 7 | #X obj 92 159 t b f, f 8; 8 | #X obj 55 131 t b f, f 16; 9 | #X obj 16 183 t b f; 10 | #X msg 92 109 0; 11 | #X obj 16 18 r camo.param.change; 12 | #X msg 55 109 1; 13 | #N canvas 0 23 156 140 once 0; 14 | #X obj 15 84 t f b, f 8; 15 | #X obj 78 84 f 0; 16 | #X obj 15 19 inlet; 17 | #X obj 60 19 inlet; 18 | #X obj 15 106 outlet; 19 | #X obj 60 41 f 1; 20 | #X obj 15 62 spigot 0; 21 | #X connect 0 0 4 0; 22 | #X connect 0 1 1 0; 23 | #X connect 1 0 6 1; 24 | #X connect 2 0 6 0; 25 | #X connect 3 0 5 0; 26 | #X connect 5 0 6 1; 27 | #X connect 6 0 0 0; 28 | #X restore 16 159 pd once; 29 | #N canvas 0 23 156 140 once 0; 30 | #X obj 89 69 f 0; 31 | #X obj 15 19 inlet; 32 | #X obj 60 19 inlet; 33 | #X obj 15 106 outlet; 34 | #X obj 60 41 f 1; 35 | #X obj 15 62 spigot 0; 36 | #X obj 15 84 t b b, f 8; 37 | #X connect 0 0 5 1; 38 | #X connect 1 0 5 0; 39 | #X connect 2 0 4 0; 40 | #X connect 4 0 5 1; 41 | #X connect 5 0 6 0; 42 | #X connect 6 0 3 0; 43 | #X connect 6 1 0 0; 44 | #X restore 92 211 pd once; 45 | #X obj 55 87 sel 1 0, f 13; 46 | #X connect 0 0 1 0; 47 | #X connect 1 0 13 0; 48 | #X connect 3 0 4 0; 49 | #X connect 4 0 2 0; 50 | #X connect 5 0 12 0; 51 | #X connect 5 1 3 1; 52 | #X connect 6 0 11 1; 53 | #X connect 6 1 3 1; 54 | #X connect 7 0 12 1; 55 | #X connect 7 1 3 0; 56 | #X connect 8 0 5 0; 57 | #X connect 9 0 11 0; 58 | #X connect 10 0 6 0; 59 | #X connect 11 0 7 0; 60 | #X connect 12 0 3 0; 61 | #X connect 13 0 10 0; 62 | #X connect 13 1 8 0; 63 | -------------------------------------------------------------------------------- /Plugins/Examples/MiniMock/param.change.pd: -------------------------------------------------------------------------------- 1 | #N canvas 553 70 251 339 10; 2 | #X obj 69 43 r gui; 3 | #X obj 69 65 route mouse; 4 | #X obj 16 299 s camomile; 5 | #X obj 16 242 pack f f, f 22; 6 | #X msg 16 275 param change \$1 \$2; 7 | #X obj 115 159 t b f, f 8; 8 | #X obj 69 131 t b f, f 14; 9 | #N canvas 0 23 156 140 one.time.1 0; 10 | #X obj 15 62 spigot 1; 11 | #X obj 15 84 t f b, f 8; 12 | #X obj 78 84 f 0; 13 | #X obj 15 19 inlet; 14 | #X obj 68 19 inlet; 15 | #X obj 15 106 outlet; 16 | #X obj 68 41 f 1; 17 | #X connect 0 0 1 0; 18 | #X connect 1 0 5 0; 19 | #X connect 1 1 2 0; 20 | #X connect 2 0 0 1; 21 | #X connect 3 0 0 0; 22 | #X connect 4 0 6 0; 23 | #X connect 6 0 0 1; 24 | #X restore 16 159 pd one.time.1; 25 | #N canvas 0 23 156 140 one.time.0 0; 26 | #X obj 89 69 f 0; 27 | #X obj 15 19 inlet; 28 | #X obj 68 19 inlet; 29 | #X obj 15 106 outlet; 30 | #X obj 68 41 f 1; 31 | #X obj 15 62 spigot 0; 32 | #X obj 15 84 t b b, f 8; 33 | #X connect 0 0 5 1; 34 | #X connect 1 0 5 0; 35 | #X connect 2 0 4 0; 36 | #X connect 4 0 5 1; 37 | #X connect 5 0 6 0; 38 | #X connect 6 0 3 0; 39 | #X connect 6 1 0 0; 40 | #X restore 115 211 pd one.time.0; 41 | #X obj 16 183 t b f; 42 | #X msg 115 111 0; 43 | #X obj 16 18 r camo.param.change; 44 | #X obj 69 87 sel 1, f 7; 45 | #X msg 69 109 1; 46 | #X connect 0 0 1 0; 47 | #X connect 1 0 12 0; 48 | #X connect 3 0 4 0; 49 | #X connect 4 0 2 0; 50 | #X connect 5 0 8 0; 51 | #X connect 5 1 3 1; 52 | #X connect 6 0 7 1; 53 | #X connect 6 1 3 1; 54 | #X connect 7 0 9 0; 55 | #X connect 8 0 3 0; 56 | #X connect 9 0 8 1; 57 | #X connect 9 1 3 0; 58 | #X connect 10 0 5 0; 59 | #X connect 11 0 7 0; 60 | #X connect 12 0 13 0; 61 | #X connect 12 1 10 0; 62 | #X connect 13 0 6 0; 63 | -------------------------------------------------------------------------------- /Source/PluginParser.h: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015-2018 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #pragma once 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include "PluginConfig.h" 14 | 15 | 16 | // ======================================================================================== // 17 | // PARSER // 18 | // ======================================================================================== // 19 | 20 | class CamomileParser 21 | { 22 | public: 23 | using bus = CamomileEnvironment::bus; 24 | using buses_layout = CamomileEnvironment::buses_layout; 25 | 26 | static std::pair getLine(std::string const& line); 27 | static std::map getOptions(std::string const& value); 28 | static std::vector getList(std::string const& value); 29 | static bool getBool(std::string const& value); 30 | static int getInteger(std::string const& value); 31 | static float getFloat(std::string const& value); 32 | static unsigned int getHexadecimalCode(std::string const& value); 33 | static std::string getString(std::string const& value); 34 | static std::pair getTwoIntegers(std::string const& value); 35 | static std::pair getTwoUnsignedIntegers(std::string const& value); 36 | 37 | static buses_layout getBusesLayout(std::string const& value); 38 | 39 | private: 40 | static size_t getNios(std::string const& value, size_t& pos); 41 | static bus getBus(std::string const& value, size_t& pos); 42 | }; 43 | 44 | -------------------------------------------------------------------------------- /Plugins/Examples/Bulgroz/Bulgroz.pd: -------------------------------------------------------------------------------- 1 | #N canvas 775 125 556 552 10; 2 | #X obj 34 230 delwrite~ \$0-del-1 22000; 3 | #X obj 34 304 line~; 4 | #X obj 79 206 delwrite~ \$0-del-2 22000; 5 | #X obj 243 200 param.change; 6 | #X obj 34 399 dac~ 1 2, f 13; 7 | #X obj 34 183 adc~ 1 2; 8 | #X obj 34 257 param.get 1; 9 | #X msg 77 279 set \$1; 10 | #X obj 208 120 hsl 180 15 0 10000 0 0 \$0-size-sld-s \$0-size-sld-r 11 | empty -2 -8 0 10 -92394 -1 -1 0 1; 12 | #X obj 401 120 nbx 5 15 -1e+37 1e+37 0 0 \$0-size-nbx-s \$0-size-nbx-r 13 | empty 0 -8 0 10 -92394 -1 -1 0 256; 14 | #X text 289 83 R170: ETITEPNOITINUP ESODNU; 15 | #X text 366 66 EVIV BULGROZ !; 16 | #X text 372 48 REVERSE DELAY; 17 | #X msg 34 279 \$1 20; 18 | #X text 343 100 Envelope Time (ms); 19 | #X obj 77 321 s \$0-size-sld-r; 20 | #X obj 243 222 param.set 1 \$0-size-sld-s; 21 | #X obj 87 300 s \$0-size-nbx-r; 22 | #X obj 242 247 r \$0-size-sld-s; 23 | #X msg 242 268 set \$1; 24 | #X obj 242 289 s \$0-size-nbx-r; 25 | #X obj 242 317 r \$0-size-nbx-s; 26 | #X obj 242 338 s \$0-size-sld-r; 27 | #X obj 109 374 delback~ \$0-del-2; 28 | #X obj 34 354 delback~ \$0-del-1; 29 | #X obj 242 380 sel 1 2, f 11; 30 | #X msg 242 401 200; 31 | #X msg 273 401 2000; 32 | #X msg 305 401 10000; 33 | #X obj 242 422 s \$0-size-nbx-r; 34 | #X obj 242 357 program.get 1; 35 | #X connect 1 0 23 0; 36 | #X connect 1 0 24 0; 37 | #X connect 5 0 0 0; 38 | #X connect 5 1 2 0; 39 | #X connect 6 0 13 0; 40 | #X connect 6 0 7 0; 41 | #X connect 7 0 15 0; 42 | #X connect 7 0 17 0; 43 | #X connect 13 0 1 0; 44 | #X connect 18 0 19 0; 45 | #X connect 19 0 20 0; 46 | #X connect 21 0 22 0; 47 | #X connect 23 0 4 1; 48 | #X connect 24 0 4 0; 49 | #X connect 25 0 26 0; 50 | #X connect 25 1 27 0; 51 | #X connect 25 2 28 0; 52 | #X connect 26 0 29 0; 53 | #X connect 27 0 29 0; 54 | #X connect 28 0 29 0; 55 | #X connect 30 0 25 0; 56 | #X coords 0 -1 1 1 460 160 1 2 2; 57 | -------------------------------------------------------------------------------- /Plugins/Examples/PdStal/PdStal.txt: -------------------------------------------------------------------------------- 1 | iolayout 2 2; 2 | code PdI2; 3 | type instrument; 4 | midiin true; 5 | midiout true; 6 | midionly false; 7 | playhead true; 8 | compatibility 1.0.7; 9 | manufacturer Pierre Guillot; 10 | 11 | param -name Param-1; 12 | param -name Param-2; 13 | param -name Param-3; 14 | param -name Param-4; 15 | param -name Param-5; 16 | param -name Param-6; 17 | param -name Param-7; 18 | param -name Param-8; 19 | param -name Param-9; 20 | param -name Param-10; 21 | param -name Param-11; 22 | param -name Param-12; 23 | param -name Param-13; 24 | param -name Param-14; 25 | param -name Param-15; 26 | param -name Param-16; 27 | param -name Param-17; 28 | param -name Param-18; 29 | param -name Param-19; 30 | param -name Param-20; 31 | param -name Param-21; 32 | param -name Param-22; 33 | param -name Param-23; 34 | param -name Param-24; 35 | param -name Param-25; 36 | param -name Param-26; 37 | param -name Param-27; 38 | param -name Param-28; 39 | param -name Param-29; 40 | param -name Param-30; 41 | param -name Param-31; 42 | param -name Param-32; 43 | param -name Param-34; 44 | param -name Param-35; 45 | param -name Param-36; 46 | param -name Param-37; 47 | param -name Param-38; 48 | param -name Param-39; 49 | param -name Param-40; 50 | param -name Param-41; 51 | param -name Param-42; 52 | param -name Param-43; 53 | param -name Param-44; 54 | param -name Param-45; 55 | param -name Param-46; 56 | param -name Param-47; 57 | param -name Param-48; 58 | param -name Param-49; 59 | param -name Param-50; 60 | param -name Param-51; 61 | param -name Param-52; 62 | param -name Param-53; 63 | param -name Param-54; 64 | param -name Param-55; 65 | param -name Param-56; 66 | param -name Param-57; 67 | param -name Param-58; 68 | param -name Param-59; 69 | param -name Param-60; 70 | param -name Param-61; 71 | param -name Param-62; 72 | param -name Param-63; 73 | param -name Param-64; 74 | -------------------------------------------------------------------------------- /Plugins/Examples/PdStalFx/PdStalFx.txt: -------------------------------------------------------------------------------- 1 | iolayout 2 2; 2 | code PdS2; 3 | type effect; 4 | midiin true; 5 | midiout true; 6 | midionly false; 7 | playhead true; 8 | compatibility 1.0.7; 9 | manufacturer Pierre Guillot; 10 | 11 | param -name Param-1; 12 | param -name Param-2; 13 | param -name Param-3; 14 | param -name Param-4; 15 | param -name Param-5; 16 | param -name Param-6; 17 | param -name Param-7; 18 | param -name Param-8; 19 | param -name Param-9; 20 | param -name Param-10; 21 | param -name Param-11; 22 | param -name Param-12; 23 | param -name Param-13; 24 | param -name Param-14; 25 | param -name Param-15; 26 | param -name Param-16; 27 | param -name Param-17; 28 | param -name Param-18; 29 | param -name Param-19; 30 | param -name Param-20; 31 | param -name Param-21; 32 | param -name Param-22; 33 | param -name Param-23; 34 | param -name Param-24; 35 | param -name Param-25; 36 | param -name Param-26; 37 | param -name Param-27; 38 | param -name Param-28; 39 | param -name Param-29; 40 | param -name Param-30; 41 | param -name Param-31; 42 | param -name Param-32; 43 | param -name Param-34; 44 | param -name Param-35; 45 | param -name Param-36; 46 | param -name Param-37; 47 | param -name Param-38; 48 | param -name Param-39; 49 | param -name Param-40; 50 | param -name Param-41; 51 | param -name Param-42; 52 | param -name Param-43; 53 | param -name Param-44; 54 | param -name Param-45; 55 | param -name Param-46; 56 | param -name Param-47; 57 | param -name Param-48; 58 | param -name Param-49; 59 | param -name Param-50; 60 | param -name Param-51; 61 | param -name Param-52; 62 | param -name Param-53; 63 | param -name Param-54; 64 | param -name Param-55; 65 | param -name Param-56; 66 | param -name Param-57; 67 | param -name Param-58; 68 | param -name Param-59; 69 | param -name Param-60; 70 | param -name Param-61; 71 | param -name Param-62; 72 | param -name Param-63; 73 | param -name Param-64; 74 | -------------------------------------------------------------------------------- /LV2/lv2/presets/presets.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix owl: . 3 | @prefix pset: . 4 | @prefix rdf: . 5 | @prefix rdfs: . 6 | @prefix xsd: . 7 | 8 | 9 | a owl:Ontology ; 10 | rdfs:label "LV2 Presets" ; 11 | rdfs:comment "Presets for LV2 plugins." ; 12 | rdfs:seeAlso . 13 | 14 | pset:Bank 15 | a rdfs:Class ; 16 | rdfs:label "Bank" ; 17 | rdfs:subClassOf [ 18 | a owl:Restriction ; 19 | owl:onProperty rdfs:label ; 20 | owl:someValuesFrom xsd:string ; 21 | rdfs:comment "A Bank MUST have at least one string rdfs:label." 22 | ] ; 23 | rdfs:comment "A bank of presets." . 24 | 25 | pset:Preset 26 | a rdfs:Class ; 27 | rdfs:subClassOf lv2:PluginBase ; 28 | rdfs:label "Preset" ; 29 | rdfs:comment "A preset for an LV2 plugin." ; 30 | rdfs:subClassOf [ 31 | a owl:Restriction ; 32 | owl:onProperty rdfs:label ; 33 | owl:someValuesFrom xsd:string ; 34 | rdfs:comment "A Preset MUST have at least one string rdfs:label." 35 | ] . 36 | 37 | pset:bank 38 | a rdf:Property , 39 | owl:ObjectProperty ; 40 | rdfs:domain pset:Preset ; 41 | rdfs:range pset:Bank ; 42 | rdfs:label "bank" ; 43 | rdfs:comment "The bank this preset belongs to." . 44 | 45 | pset:value 46 | a rdf:Property , 47 | owl:DatatypeProperty , 48 | owl:FunctionalProperty ; 49 | rdfs:domain lv2:PortBase ; 50 | rdfs:label "value" ; 51 | rdfs:comment "The value of a port in a preset." . 52 | 53 | pset:preset 54 | a rdf:Property , 55 | owl:ObjectProperty ; 56 | rdfs:domain lv2:PluginBase ; 57 | rdfs:range pset:Preset ; 58 | rdfs:label "preset" ; 59 | rdfs:comment "The preset currently applied to a plugin instance." . 60 | 61 | -------------------------------------------------------------------------------- /LV2/lv2/presets/presets.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2012-2016 David Robillard 3 | 4 | Permission to use, copy, modify, and/or distribute this software for any 5 | purpose with or without fee is hereby granted, provided that the above 6 | copyright notice and this permission notice appear in all copies. 7 | 8 | THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 | */ 16 | 17 | /** 18 | @defgroup presets Presets 19 | @ingroup lv2 20 | 21 | Presets for plugins, see for details. 22 | 23 | @{ 24 | */ 25 | 26 | #ifndef LV2_PRESETS_H 27 | #define LV2_PRESETS_H 28 | 29 | #define LV2_PRESETS_URI "http://lv2plug.in/ns/ext/presets" ///< http://lv2plug.in/ns/ext/presets 30 | #define LV2_PRESETS_PREFIX LV2_PRESETS_URI "#" ///< http://lv2plug.in/ns/ext/presets# 31 | 32 | #define LV2_PRESETS__Bank LV2_PRESETS_PREFIX "Bank" ///< http://lv2plug.in/ns/ext/presets#Bank 33 | #define LV2_PRESETS__Preset LV2_PRESETS_PREFIX "Preset" ///< http://lv2plug.in/ns/ext/presets#Preset 34 | #define LV2_PRESETS__bank LV2_PRESETS_PREFIX "bank" ///< http://lv2plug.in/ns/ext/presets#bank 35 | #define LV2_PRESETS__preset LV2_PRESETS_PREFIX "preset" ///< http://lv2plug.in/ns/ext/presets#preset 36 | #define LV2_PRESETS__value LV2_PRESETS_PREFIX "value" ///< http://lv2plug.in/ns/ext/presets#value 37 | 38 | #endif /* LV2_PRESETS_H */ 39 | 40 | /** 41 | @} 42 | */ 43 | -------------------------------------------------------------------------------- /LV2/lv2/state/state.ttl: -------------------------------------------------------------------------------- 1 | @prefix lv2: . 2 | @prefix owl: . 3 | @prefix rdf: . 4 | @prefix rdfs: . 5 | @prefix state: . 6 | 7 | 8 | a owl:Ontology ; 9 | rdfs:label "LV2 State" ; 10 | rdfs:comment "An interface for LV2 plugins to save and restore state." ; 11 | rdfs:seeAlso , 12 | . 13 | 14 | state:interface 15 | a lv2:ExtensionData ; 16 | rdfs:label "interface" ; 17 | rdfs:comment "A plugin interface for saving and restoring state." . 18 | 19 | state:State 20 | a rdfs:Class ; 21 | rdfs:label "State" ; 22 | rdfs:comment "LV2 plugin state." . 23 | 24 | state:loadDefaultState 25 | a lv2:Feature ; 26 | rdfs:label "load default state" ; 27 | rdfs:comment "A feature indicating that the plugin has default state." . 28 | 29 | state:state 30 | a rdf:Property , 31 | owl:ObjectProperty ; 32 | rdfs:label "state" ; 33 | rdfs:range state:State ; 34 | rdfs:comment "The state of an LV2 plugin instance." . 35 | 36 | state:mapPath 37 | a lv2:Feature ; 38 | rdfs:label "map path" ; 39 | rdfs:comment "A feature for mapping between absolute and abstract file paths." . 40 | 41 | state:makePath 42 | a lv2:Feature ; 43 | rdfs:label "make path" ; 44 | rdfs:comment "A feature for creating new files and directories." . 45 | 46 | state:threadSafeRestore 47 | a lv2:Feature ; 48 | rdfs:label "thread-safe restore" ; 49 | rdfs:comment "A feature indicating support for thread-safe state restoration." . 50 | 51 | state:freePath 52 | a lv2:Feature ; 53 | rdfs:label "free path" ; 54 | rdfs:comment "A feature for freeing paths allocated by the host." . 55 | 56 | state:Changed 57 | a rdfs:Class ; 58 | rdfs:label "Changed" ; 59 | rdfs:comment "A notification that the internal state of the plugin has changed." . 60 | 61 | -------------------------------------------------------------------------------- /LV2/lv2/morph/morph.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2012-2016 David Robillard 3 | 4 | Permission to use, copy, modify, and/or distribute this software for any 5 | purpose with or without fee is hereby granted, provided that the above 6 | copyright notice and this permission notice appear in all copies. 7 | 8 | THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 | */ 16 | 17 | /** 18 | @defgroup morph Morph 19 | @ingroup lv2 20 | 21 | Ports that can dynamically change type, see 22 | for details. 23 | 24 | @{ 25 | */ 26 | 27 | #ifndef LV2_MORPH_H 28 | #define LV2_MORPH_H 29 | 30 | #define LV2_MORPH_URI "http://lv2plug.in/ns/ext/morph" ///< http://lv2plug.in/ns/ext/morph 31 | #define LV2_MORPH_PREFIX LV2_MORPH_URI "#" ///< http://lv2plug.in/ns/ext/morph# 32 | 33 | #define LV2_MORPH__AutoMorphPort LV2_MORPH_PREFIX "AutoMorphPort" ///< http://lv2plug.in/ns/ext/morph#AutoMorphPort 34 | #define LV2_MORPH__MorphPort LV2_MORPH_PREFIX "MorphPort" ///< http://lv2plug.in/ns/ext/morph#MorphPort 35 | #define LV2_MORPH__interface LV2_MORPH_PREFIX "interface" ///< http://lv2plug.in/ns/ext/morph#interface 36 | #define LV2_MORPH__supportsType LV2_MORPH_PREFIX "supportsType" ///< http://lv2plug.in/ns/ext/morph#supportsType 37 | #define LV2_MORPH__currentType LV2_MORPH_PREFIX "currentType" ///< http://lv2plug.in/ns/ext/morph#currentType 38 | 39 | #endif /* LV2_MORPH_H */ 40 | 41 | /** 42 | @} 43 | */ 44 | -------------------------------------------------------------------------------- /Source/PluginEditorConsole.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | // Copyright (c) 2015-2018 Pierre Guillot. 3 | // For information on usage and redistribution, and for a DISCLAIMER OF ALL 4 | // WARRANTIES, see the file, "LICENSE.txt," in this distribution. 5 | */ 6 | 7 | #pragma once 8 | 9 | #include "PluginProcessor.h" 10 | 11 | ////////////////////////////////////////////////////////////////////////////////////////////// 12 | // CONSOLE // 13 | ////////////////////////////////////////////////////////////////////////////////////////////// 14 | 15 | class PluginEditorConsole : public Component, public Timer, public Button::Listener, public ListBoxModel 16 | { 17 | public: 18 | PluginEditorConsole(CamomileAudioProcessor& p); 19 | ~PluginEditorConsole(); 20 | void timerCallback() final; 21 | void buttonClicked(Button* button) final; 22 | void paint(Graphics& g) final; 23 | bool keyPressed(const KeyPress& key) final; 24 | void resized() final; 25 | 26 | int getNumRows() final { return static_cast(m_size); } 27 | void paintListBoxItem(int rowNumber, Graphics& g, int width, int height, bool rowIsSelected) final; 28 | void deleteKeyPressed(int lastRowSelected) final; 29 | private: 30 | 31 | void clearSelection(); 32 | void copySelection(); 33 | typedef CamomileAudioProcessor::ConsoleLevel ConsoleLevel; 34 | CamomileAudioProcessor& m_history; 35 | size_t m_size = 0; 36 | ListBox m_table; 37 | ConsoleLevel m_level = ConsoleLevel::Normal; 38 | std::unique_ptr