| @@ -0,0 +1,16 @@ | |||||
| *.a | |||||
| *.d | |||||
| *.o | |||||
| *.exe | |||||
| *.dll | |||||
| *.dylib | |||||
| *.so | |||||
| *.zip | |||||
| .kdev_include_paths | |||||
| .kdev4/ | |||||
| bin/*-dssi/ | |||||
| bin/*.lv2/ | |||||
| bin/Kars | |||||
| @@ -0,0 +1,13 @@ | |||||
| DISTRHO Plugin Framework (DPF) | |||||
| Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
| Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
| or without fee is hereby granted, provided that the above copyright notice and this | |||||
| permission notice appear in all copies. | |||||
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
| TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
| NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
| DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
| IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
| CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
| @@ -0,0 +1,41 @@ | |||||
| #!/usr/bin/make -f | |||||
| # Makefile for DISTRHO Plugins # | |||||
| # ---------------------------- # | |||||
| # Created by falkTX | |||||
| # | |||||
| include Makefile.mk | |||||
| all: libs plugins gen | |||||
| # -------------------------------------------------------------- | |||||
| libs: | |||||
| ifeq ($(HAVE_DGL),true) | |||||
| $(MAKE) -C dpf/dgl | |||||
| endif | |||||
| plugins: libs | |||||
| $(MAKE) all -C plugins/Kars | |||||
| gen: plugins dpf/utils/lv2_ttl_generator | |||||
| @$(CURDIR)/dpf/utils/generate-ttl.sh | |||||
| ifeq ($(MACOS),true) | |||||
| @$(CURDIR)/dpf/utils/generate-vst-bundles.sh | |||||
| endif | |||||
| dpf/utils/lv2_ttl_generator: | |||||
| $(MAKE) -C dpf/utils/lv2-ttl-generator | |||||
| # -------------------------------------------------------------- | |||||
| clean: | |||||
| ifeq ($(HAVE_DGL),true) | |||||
| $(MAKE) clean -C dpf/dgl | |||||
| endif | |||||
| $(MAKE) clean -C dpf/utils/lv2-ttl-generator | |||||
| $(MAKE) clean -C plugins/Kars | |||||
| # -------------------------------------------------------------- | |||||
| .PHONY: plugins | |||||
| @@ -0,0 +1,147 @@ | |||||
| #!/usr/bin/make -f | |||||
| # Makefile for DISTRHO Plugins # | |||||
| # ---------------------------- # | |||||
| # Created by falkTX | |||||
| # | |||||
| AR ?= ar | |||||
| CC ?= gcc | |||||
| CXX ?= g++ | |||||
| # -------------------------------------------------------------- | |||||
| # Fallback to Linux if no other OS defined | |||||
| ifneq ($(HAIKU),true) | |||||
| ifneq ($(MACOS),true) | |||||
| ifneq ($(WIN32),true) | |||||
| LINUX=true | |||||
| endif | |||||
| endif | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Set build and link flags | |||||
| BASE_FLAGS = -Wall -Wextra -pipe | |||||
| BASE_OPTS = -O2 -ffast-math -mtune=generic -msse -msse2 -fdata-sections -ffunction-sections | |||||
| ifneq ($(MACOS),true) | |||||
| # MacOS doesn't support this | |||||
| BASE_OPTS += -mfpmath=sse | |||||
| endif | |||||
| ifeq ($(MACOS),true) | |||||
| # MacOS linker flags | |||||
| LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs | |||||
| else | |||||
| # Common linker flags | |||||
| LINK_OPTS = -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-O1 -Wl,--as-needed -Wl,--strip-all | |||||
| endif | |||||
| ifeq ($(RASPPI),true) | |||||
| # Raspberry-Pi optimization flags | |||||
| BASE_OPTS = -O2 -ffast-math -march=armv6 -mfpu=vfp -mfloat-abi=hard | |||||
| LINK_OPTS = -Wl,-O1 -Wl,--as-needed -Wl,--strip-all | |||||
| endif | |||||
| ifeq ($(PANDORA),true) | |||||
| # OpenPandora optimization flags | |||||
| BASE_OPTS = -O2 -ffast-math -march=armv7-a -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp | |||||
| LINK_OPTS = -Wl,-O1 -Wl,--as-needed -Wl,--strip-all | |||||
| endif | |||||
| ifeq ($(NOOPT),true) | |||||
| # No optimization flags | |||||
| BASE_OPTS = -O2 -ffast-math -fdata-sections -ffunction-sections | |||||
| endif | |||||
| ifneq ($(WIN32),true) | |||||
| # not needed for Windows | |||||
| BASE_FLAGS += -fPIC -DPIC | |||||
| endif | |||||
| ifeq ($(DEBUG),true) | |||||
| BASE_FLAGS += -DDEBUG -O0 -g | |||||
| LINK_OPTS = | |||||
| else | |||||
| BASE_FLAGS += -DNDEBUG $(BASE_OPTS) -fvisibility=hidden | |||||
| CXXFLAGS += -fvisibility-inlines-hidden | |||||
| endif | |||||
| BUILD_C_FLAGS = $(BASE_FLAGS) -std=c99 -std=gnu99 $(CFLAGS) | |||||
| BUILD_CXX_FLAGS = $(BASE_FLAGS) -std=c++0x -std=gnu++0x $(CXXFLAGS) $(CPPFLAGS) | |||||
| LINK_FLAGS = $(LINK_OPTS) -Wl,--no-undefined $(LDFLAGS) | |||||
| ifeq ($(MACOS),true) | |||||
| # No C++11 support | |||||
| BUILD_CXX_FLAGS = $(BASE_FLAGS) $(CXXFLAGS) $(CPPFLAGS) | |||||
| LINK_FLAGS = $(LINK_OPTS) $(LDFLAGS) | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Check for optional libs | |||||
| ifeq ($(LINUX),true) | |||||
| HAVE_DGL = $(shell pkg-config --exists gl x11 && echo true) | |||||
| HAVE_JACK = $(shell pkg-config --exists jack && echo true) | |||||
| HAVE_LIBLO = $(shell pkg-config --exists liblo && echo true) | |||||
| endif | |||||
| ifeq ($(MACOS),true) | |||||
| HAVE_DGL = true | |||||
| endif | |||||
| ifeq ($(WIN32),true) | |||||
| HAVE_DGL = true | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Set libs stuff | |||||
| ifeq ($(HAVE_DGL),true) | |||||
| ifeq ($(LINUX),true) | |||||
| DGL_FLAGS = $(shell pkg-config --cflags gl x11) | |||||
| DGL_LIBS = $(shell pkg-config --libs gl x11) | |||||
| endif | |||||
| ifeq ($(MACOS),true) | |||||
| DGL_LIBS = -framework OpenGL -framework Cocoa | |||||
| endif | |||||
| ifeq ($(WIN32),true) | |||||
| DGL_LIBS = -lopengl32 -lgdi32 | |||||
| endif | |||||
| endif # HAVE_DGL | |||||
| # -------------------------------------------------------------- | |||||
| # Set app extension | |||||
| ifeq ($(WIN32),true) | |||||
| APP_EXT = .exe | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Set shared lib extension | |||||
| LIB_EXT = .so | |||||
| ifeq ($(MACOS),true) | |||||
| LIB_EXT = .dylib | |||||
| endif | |||||
| ifeq ($(WIN32),true) | |||||
| LIB_EXT = .dll | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Set shared library CLI arg | |||||
| SHARED = -shared | |||||
| ifeq ($(MACOS),true) | |||||
| SHARED = -dynamiclib | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| @@ -0,0 +1,12 @@ | |||||
| # DISTRHO Kars | |||||
| Simple karplus-strong plucked string synth. | |||||
| This is a DPF'ied build of the karplong DSSI example synth, written by Chris Cannam. | |||||
| It implements the basic Karplus-Strong plucked-string synthesis | |||||
| algorithm (Kevin Karplus & Alex Strong, "Digital Synthesis of | |||||
| Plucked-String and Drum Timbres", Computer Music Journal 1983). | |||||
| ## Screenshot | |||||
| <br/> | |||||
| @@ -0,0 +1,3 @@ | |||||
| All final plugin builds will be placed in this folder. | |||||
| There is no "make install" process, simply copy those files to their appropriate place. | |||||
| @@ -0,0 +1,21 @@ | |||||
| @prefix modgui: <http://moddevices.com/ns/modgui#> . | |||||
| @prefix lv2: <http://lv2plug.in/ns/lv2core#> . | |||||
| <http://distrho.sf.net/plugins/Kars> | |||||
| modgui:gui [ | |||||
| modgui:resourcesDirectory <modgui> ; | |||||
| modgui:iconTemplate <modgui/icon-kars.html> ; | |||||
| modgui:stylesheet <modgui/stylesheet-kars.css> ; | |||||
| modgui:screenshot <modgui/screenshot-kars.png> ; | |||||
| modgui:thumbnail <modgui/thumbnail-kars.png> ; | |||||
| modgui:brand "DISTRHO" ; | |||||
| modgui:label "Kars" ; | |||||
| modgui:model "boxy-small" ; | |||||
| modgui:panel "1-footswitch" ; | |||||
| modgui:color "yellow" ; | |||||
| modgui:port [ | |||||
| lv2:index 0 ; | |||||
| lv2:symbol "sustain" ; | |||||
| lv2:name "Sustain" ; | |||||
| ] ; | |||||
| ] . | |||||
| @@ -0,0 +1,41 @@ | |||||
| <div class="mod-pedal mod-pedal-boxy{{{cns}}} mod-boxy50 mod-one-footswitch mod-{{color}} {{color}}"> | |||||
| <div mod-role="drag-handle" class="mod-drag-handle"></div> | |||||
| <div class="mod-plugin-brand"><h1>{{brand}}</h1></div> | |||||
| <div class="mod-plugin-name"><h1>{{label}}</h1></div> | |||||
| <div class="mod-light on" mod-role="bypass-light"></div> | |||||
| <div class="mod-footswitch" mod-role="bypass"></div> | |||||
| <div class="mod-pedal-input"> | |||||
| {{#effect.ports.audio.input}} | |||||
| <div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-audio-port" mod-port-symbol="{{symbol}}"> | |||||
| <div class="mod-pedal-input-image"></div> | |||||
| </div> | |||||
| {{/effect.ports.audio.input}} | |||||
| {{#effect.ports.midi.input}} | |||||
| <div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-midi-port" mod-port-symbol="{{symbol}}"> | |||||
| <div class="mod-pedal-input-image"></div> | |||||
| </div> | |||||
| {{/effect.ports.midi.input}} | |||||
| {{#effect.ports.cv.input}} | |||||
| <div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-cv-port" mod-port-symbol="{{symbol}}"> | |||||
| <div class="mod-pedal-input-image"></div> | |||||
| </div> | |||||
| {{/effect.ports.cv.input}} | |||||
| </div> | |||||
| <div class="mod-pedal-output"> | |||||
| {{#effect.ports.audio.output}} | |||||
| <div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-audio-port" mod-port-symbol="{{symbol}}"> | |||||
| <div class="mod-pedal-output-image"></div> | |||||
| </div> | |||||
| {{/effect.ports.audio.output}} | |||||
| {{#effect.ports.midi.output}} | |||||
| <div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-midi-port" mod-port-symbol="{{symbol}}"> | |||||
| <div class="mod-pedal-output-image"></div> | |||||
| </div> | |||||
| {{/effect.ports.midi.output}} | |||||
| {{#effect.ports.cv.output}} | |||||
| <div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-cv-port" mod-port-symbol="{{symbol}}"> | |||||
| <div class="mod-pedal-output-image"></div> | |||||
| </div> | |||||
| {{/effect.ports.cv.output}} | |||||
| </div> | |||||
| </div> | |||||
| @@ -0,0 +1,677 @@ | |||||
| /* STYLES FOR THE BOXY PEDAL */ | |||||
| @import url(/fonts/nexa/stylesheet.css); | |||||
| @import url(/fonts/questrial/stylesheet.css); | |||||
| /* = CONTAINER | |||||
| ================================================ */ | |||||
| .mod-pedal-boxy{{{cns}}} { | |||||
| background-position:center center; | |||||
| background-repeat:no-repeat; | |||||
| background-size:230px 431px; | |||||
| height:431px; | |||||
| position:absolute; | |||||
| width:230px; | |||||
| border-radius: 21px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50 { | |||||
| background-size:301px 315px; | |||||
| height:315px; | |||||
| width:301px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75 { | |||||
| background-size:326px 431px; | |||||
| width:326px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy85 { | |||||
| background-size:364px 431px; | |||||
| width:364px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy100 { | |||||
| background-size:421px 431px; | |||||
| width:421px; | |||||
| } | |||||
| /* = BACKGROUND IMAGES - Colour of the pedal | |||||
| ================================================ */ | |||||
| /* NORMAL */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-blue { | |||||
| background-image:url(/resources/pedals/boxy/blue.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-brown { | |||||
| background-image:url(/resources/pedals/boxy/brown.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-cream { | |||||
| background-image:url(/resources/pedals/boxy/cream.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-darkblue { | |||||
| background-image:url(/resources/pedals/boxy/darkblue.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-gray { | |||||
| background-image:url(/resources/pedals/boxy/gray.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-green { | |||||
| background-image:url(/resources/pedals/boxy/green.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-orange { | |||||
| background-image:url(/resources/pedals/boxy/orange.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-purple { | |||||
| background-image:url(/resources/pedals/boxy/purple.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-red { | |||||
| background-image:url(/resources/pedals/boxy/red.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-white { | |||||
| background-image:url(/resources/pedals/boxy/white.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-yellow { | |||||
| background-image:url(/resources/pedals/boxy/yellow.png{{{ns}}}); | |||||
| } | |||||
| /* SMALL */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-blue { | |||||
| background-image:url(/resources/pedals/boxy-small/blue.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-brown { | |||||
| background-image:url(/resources/pedals/boxy-small/brown.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-cream { | |||||
| background-image:url(/resources/pedals/boxy-small/cream.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-darkblue { | |||||
| background-image:url(/resources/pedals/boxy-small/darkblue.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-gray { | |||||
| background-image:url(/resources/pedals/boxy-small/gray.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-green { | |||||
| background-image:url(/resources/pedals/boxy-small/green.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-orange { | |||||
| background-image:url(/resources/pedals/boxy-small/orange.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-purple { | |||||
| background-image:url(/resources/pedals/boxy-small/purple.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-red { | |||||
| background-image:url(/resources/pedals/boxy-small/red.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.mod-white { | |||||
| background-image:url(/resources/pedals/boxy-small/white.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50.yellow { | |||||
| background-image:url(/resources/pedals/boxy-small/yellow.png{{{ns}}}); | |||||
| } | |||||
| /* LARGE */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-blue { | |||||
| background-image:url(/resources/pedals/boxy75/blue.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-brown { | |||||
| background-image:url(/resources/pedals/boxy75/brown.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-cream { | |||||
| background-image:url(/resources/pedals/boxy75/cream.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-darkblue { | |||||
| background-image:url(/resources/pedals/boxy75/darkblue.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-gray { | |||||
| background-image:url(/resources/pedals/boxy75/gray.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-green { | |||||
| background-image:url(/resources/pedals/boxy75/green.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-orange { | |||||
| background-image:url(/resources/pedals/boxy75/orange.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-purple { | |||||
| background-image:url(/resources/pedals/boxy75/purple.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-red { | |||||
| background-image:url(/resources/pedals/boxy75/red.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.mod-white { | |||||
| background-image:url(/resources/pedals/boxy75/white.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy75.yellow { | |||||
| background-image:url(/resources/pedals/boxy75/yellow.png{{{ns}}}); | |||||
| } | |||||
| /* BIGGER */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy85.mod-yellow { | |||||
| background-image:url(/resources/pedals/boxy85/yellow.png{{{ns}}}); | |||||
| } | |||||
| /* HUGE */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy100.mod-yellow { | |||||
| background-image:url(/resources/pedals/boxy100/yellow.png{{{ns}}}); | |||||
| } | |||||
| /* = PLUGIN'S AUTHOR | |||||
| ================================================ */ | |||||
| .mod-pedal-boxy{{{cns}}} .mod-plugin-brand { | |||||
| left:0; | |||||
| position:absolute; | |||||
| right:0; | |||||
| text-align:center; | |||||
| text-transform:uppercase; | |||||
| top:160px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-plugin-brand h1 { | |||||
| border-color:#000; | |||||
| border-radius:12px; | |||||
| border-style:solid; | |||||
| border-width:4px; | |||||
| display:inline-block; | |||||
| font-family:"Nexa"; | |||||
| font-size:32px; | |||||
| padding:3px 9px 0; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-plugin-brand, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-plugin-brand, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-plugin-brand, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-plugin-brand { | |||||
| top:190px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50 .mod-plugin-brand { | |||||
| top:16px; | |||||
| } | |||||
| /* = PLUGIN'S NAME | |||||
| ================================================ */ | |||||
| .mod-pedal-boxy{{{cns}}} .mod-plugin-name { | |||||
| left:30px; | |||||
| overflow:hidden; | |||||
| position:absolute; | |||||
| right:30px; | |||||
| text-align:center; | |||||
| top:340px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-plugin-name h1 { | |||||
| font-family:"Questrial"; | |||||
| font-size:21px; | |||||
| line-height:1; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-plugin-name, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-plugin-name, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-plugin-name, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-plugin-name { | |||||
| top:350px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50 .mod-plugin-name { | |||||
| top:230px; | |||||
| } | |||||
| /* = PLUGIN'S AUTHO AND NAME COLOURS | |||||
| ================================================ */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-blue .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-blue .mod-plugin-name h1 { | |||||
| color:rgb(0,0,0); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-brown .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-brown .mod-plugin-name h1 { | |||||
| border-color:rgb(255,255,255); | |||||
| color:rgb(255,255,255); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-cream .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-cream .mod-plugin-name h1 { | |||||
| color:rgb(0,0,0); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-darkblue .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-darkblue .mod-plugin-name h1 { | |||||
| border-color:rgb(255,255,255); | |||||
| color:rgb(255,255,255); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-gray .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-gray .mod-plugin-name h1 { | |||||
| color:rgb(0,0,0); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-green .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-green .mod-plugin-name h1 { | |||||
| border-color:rgb(255,255,255); | |||||
| color:rgb(255,255,255); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-orange .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-orange .mod-plugin-name h1 { | |||||
| color:rgb(0,0,0); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-purple .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-purple .mod-plugin-name h1 { | |||||
| border-color:rgb(255,255,255); | |||||
| color:rgb(255,255,255); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-red .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-red .mod-plugin-name h1 { | |||||
| color:rgb(0,0,0); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-white .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-white .mod-plugin-name h1 { | |||||
| color:rgb(0,0,0); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-yellow .mod-plugin-brand h1, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-yellow .mod-plugin-name h1 { | |||||
| color:rgb(0,0,0); | |||||
| } | |||||
| /* = LIGHT ON/OFF | |||||
| ================================================ */ | |||||
| .mod-pedal-boxy{{{cns}}} .mod-light { | |||||
| background-position:center center; | |||||
| background-repeat:no-repeat; | |||||
| height:32px; | |||||
| left:10px; | |||||
| position:absolute; | |||||
| right:10px; | |||||
| top:235px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-light, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-light, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-light, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-light { | |||||
| top:253px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50 .mod-light { | |||||
| top:105px; | |||||
| } | |||||
| /* = FOOTSWITCH | |||||
| ================================================ */ | |||||
| .mod-pedal-boxy{{{cns}}} .mod-footswitch { | |||||
| background-image:url(/resources/pedals/footswitch.png{{{ns}}}); | |||||
| background-position:bottom center; | |||||
| background-repeat:no-repeat; | |||||
| background-size:auto 132px; | |||||
| bottom: 95px; | |||||
| left: 13px; | |||||
| right: 13px; | |||||
| cursor:pointer; | |||||
| height:66px; | |||||
| width: 66px; | |||||
| margin: auto; | |||||
| position:absolute !important; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-footswitch.on { | |||||
| background-position-y: top !important | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-footswitch, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-footswitch, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-footswitch, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-footswitch { | |||||
| top:285px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-boxy50 .mod-footswitch { | |||||
| top:140px; | |||||
| } | |||||
| /* = KNOBS | |||||
| ================================================ */ | |||||
| .mod-pedal-boxy{{{cns}}} .mod-control-group { | |||||
| margin:20px; | |||||
| position:relative; | |||||
| text-align:center; | |||||
| z-index:30; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-control-group .mod-knob { | |||||
| overflow:hidden; | |||||
| position:relative; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-control-group .mod-knob { | |||||
| height:110px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-control-group .mod-knob { | |||||
| height:81px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| bottom:0px; | |||||
| display:block; | |||||
| font-size:11px; | |||||
| font-weight:bold; | |||||
| height:12px; | |||||
| left:0; | |||||
| line-height:1; | |||||
| margin:0; | |||||
| overflow:hidden; | |||||
| padding:0; | |||||
| position:absolute; | |||||
| right:0; | |||||
| text-transform:uppercase; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-blue .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-brown .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:white; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-cream .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-darkblue .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:white; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-gray .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-green .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:white; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-orange .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-purple .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:white; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-red .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-white .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-yellow .mod-control-group .mod-knob > span.mod-knob-title { | |||||
| color:black; | |||||
| } | |||||
| /* ONE and TWO KNOBS */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-one-knob .mod-control-group .mod-knob .mod-knob-image, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group .mod-knob .mod-knob-image { | |||||
| background-image:url(/resources/knobs/boxy/boxy.png{{{ns}}}); | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-one-knob .mod-control-group .mod-knob .mod-knob-image, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group .mod-knob .mod-knob-image { | |||||
| height:100px; | |||||
| margin:0 auto; | |||||
| width:100px; | |||||
| } | |||||
| /* TWO KNOBS */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group { | |||||
| margin:20px 10px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-two-knobs .mod-control-group .mod-knob { | |||||
| float:left; | |||||
| width:50%; | |||||
| } | |||||
| /* THREE AND HIGHER KNOBS */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-control-group, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-control-group, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-control-group, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-control-group, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-control-group, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-control-group { | |||||
| margin:20px 6px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-control-group .mod-knob, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-control-group .mod-knob { | |||||
| display:inline-block; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-control-group .mod-knob .mod-knob-image, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-four-knobs .mod-control-group .mod-knob .mod-knob-image, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-five-knobs .mod-control-group .mod-knob .mod-knob-image, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-six-knobs .mod-control-group .mod-knob .mod-knob-image, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-seven-knobs .mod-control-group .mod-knob .mod-knob-image, | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-control-group .mod-knob .mod-knob-image { | |||||
| background-image:url(/resources/knobs/lata/lata.png{{{ns}}}); | |||||
| background-repeat:no-repeat; | |||||
| background-size:auto 70px; | |||||
| height:70px; | |||||
| margin:0 -2px; | |||||
| width:70px; | |||||
| } | |||||
| /* EIGTH KNOBS */ | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-knobs .mod-knob { | |||||
| width:70px; | |||||
| } | |||||
| /* = ENUMERATED LIST | |||||
| ================================================ */ | |||||
| .mod-pedal-boxy{{{cns}}} .mod-enumerated-group { | |||||
| height:31px; | |||||
| margin:20px auto 0 !important; | |||||
| position:relative; | |||||
| width:190px; | |||||
| z-index:35; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-three-knobs .mod-enumerated-group { | |||||
| margin-bottom:5px !important; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-enumerated { | |||||
| background-position:right center; | |||||
| background-repeat:no-repeat; | |||||
| font-size:11px; | |||||
| font-weight:bold; | |||||
| left:0; | |||||
| line-height:2; | |||||
| overflow:hidden; | |||||
| position:absolute; | |||||
| right:0; | |||||
| text-align:left; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-enumerated .mod-enumerated-selected { | |||||
| background-color:rgba(0,0,0,.3); | |||||
| box-shadow:inset 0 0 4px rgba(0,0,0,.3); | |||||
| border-radius:4px; | |||||
| padding:3px 9px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-enumerated .mod-enumerated-selected { | |||||
| border-radius:4px 4px 0 0; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-enumerated .mod-enumerated-list { | |||||
| display:none; | |||||
| color:#fff; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-enumerated .mod-enumerated-list { | |||||
| background-color:rgba(0,0,0,.9); | |||||
| display:none; | |||||
| height:115px; | |||||
| overflow:auto; | |||||
| position:relative; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-enumerated .mod-enumerated-list > div { | |||||
| padding:3px 9px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-enumerated .mod-enumerated-list > div:hover { | |||||
| background-color:rgba(255,255,255,.2); | |||||
| cursor:pointer; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-blue .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-black.png{{{ns}}}); | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-brown .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-white.png{{{ns}}}); | |||||
| color:white; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-cream .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-black.png{{{ns}}}); | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-darkblue .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-white.png{{{ns}}}); | |||||
| color:white; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-gray .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-black.png{{{ns}}}); | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-green .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-white.png{{{ns}}}); | |||||
| color:white; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-orange .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-black.png{{{ns}}}); | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-purple .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-white.png{{{ns}}}); | |||||
| color:white; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-red .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-black.png{{{ns}}}); | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-white .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-black.png{{{ns}}}); | |||||
| color:black; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-yellow .mod-enumerated { | |||||
| background-image:url(/resources/utils/dropdown-arrow-black.png{{{ns}}}); | |||||
| color:black; | |||||
| } | |||||
| /* SLIDER | |||||
| ================================================ */ | |||||
| .mod-pedal-boxy{{{cns}}} .mod-slider:first-child { | |||||
| margin-left:8px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-slider { | |||||
| color:black; | |||||
| float:left; | |||||
| font-size:11px; | |||||
| height:140px; | |||||
| margin-bottom:2px; | |||||
| margin-right:2px; | |||||
| overflow:hidden; | |||||
| position:relative; | |||||
| text-align:center; | |||||
| width:33px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-slider .mod-slider-title { | |||||
| display:block; | |||||
| font-size:11px; | |||||
| font-weight:bold; | |||||
| height:7px; | |||||
| line-height:1; | |||||
| margin-bottom:3px; | |||||
| overflow:hidden; | |||||
| padding:7px 0 5px; | |||||
| position:relative; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-slider .mod-slider-image { | |||||
| background-image:url(/resources/pedals/slider.png{{{ns}}}); | |||||
| background-repeat:no-repeat; | |||||
| background-size:auto 110px; | |||||
| height:110px; | |||||
| margin:0 auto; | |||||
| width:44px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}} .mod-slider .mod-slider-image:hover { | |||||
| cursor:pointer; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-three-sliders .mod-slider { | |||||
| margin:0; | |||||
| width:33%; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-four-sliders .mod-slider { | |||||
| margin:0; | |||||
| width:25%; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-five-sliders .mod-slider { | |||||
| margin:0; | |||||
| width:20%; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-six-sliders .mod-slider { | |||||
| margin:0; | |||||
| width:16.5%; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-seven-sliders .mod-slider { | |||||
| margin:0; | |||||
| width:14.2%; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-eight-sliders .mod-slider { | |||||
| margin:0; | |||||
| width:12.5%; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-nine-sliders .mod-slider { | |||||
| margin:0; | |||||
| width:11.11%; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-ten-sliders .mod-slider { | |||||
| margin:0; | |||||
| width:10%; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-ten-sliders .mod-slider .mod-slider-image { | |||||
| margin-left:-5px; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-twelve-sliders .mod-slider { | |||||
| margin:0; | |||||
| width:8.333333%; | |||||
| } | |||||
| .mod-pedal-boxy{{{cns}}}.mod-twelve-sliders .mod-slider .mod-slider-image { | |||||
| margin-left:-5px; | |||||
| } | |||||
| @@ -0,0 +1,20 @@ | |||||
| /* (Auto-generated binary data file). */ | |||||
| #ifndef BINARY_DISTRHOARTWORKKARS_HPP | |||||
| #define BINARY_DISTRHOARTWORKKARS_HPP | |||||
| namespace DistrhoArtworkKars | |||||
| { | |||||
| extern const char* backgroundData; | |||||
| const unsigned int backgroundDataSize = 379260; | |||||
| const unsigned int backgroundWidth = 301; | |||||
| const unsigned int backgroundHeight = 315; | |||||
| extern const char* switchData; | |||||
| const unsigned int switchDataSize = 61952; | |||||
| const unsigned int switchWidth = 88; | |||||
| const unsigned int switchHeight = 176; | |||||
| } | |||||
| #endif // BINARY_DISTRHOARTWORKKARS_HPP | |||||
| @@ -0,0 +1,29 @@ | |||||
| /* | |||||
| * DISTRHO Kars Plugin, based on karplong by Chris Cannam. | |||||
| * Copyright (C) 2015 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
| * or without fee is hereby granted, provided that the above copyright notice and this | |||||
| * permission notice appear in all copies. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
| * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
| * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
| * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
| * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
| */ | |||||
| #ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| #define DISTRHO_PLUGIN_NAME "Kars" | |||||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/Kars" | |||||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||||
| #define DISTRHO_PLUGIN_IS_RT_SAFE 1 | |||||
| #define DISTRHO_PLUGIN_IS_SYNTH 1 | |||||
| #define DISTRHO_PLUGIN_NUM_INPUTS 0 | |||||
| #define DISTRHO_PLUGIN_NUM_OUTPUTS 1 | |||||
| #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | |||||
| @@ -0,0 +1,215 @@ | |||||
| /* | |||||
| * DISTRHO Kars Plugin, based on Nekobee by Sean Bolton and others. | |||||
| * Copyright (C) 2004 Sean Bolton and others | |||||
| * Copyright (C) 2013-2015 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
| * or without fee is hereby granted, provided that the above copyright notice and this | |||||
| * permission notice appear in all copies. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
| * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
| * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
| * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
| * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
| */ | |||||
| #include "DistrhoPluginKars.hpp" | |||||
| START_NAMESPACE_DISTRHO | |||||
| // ----------------------------------------------------------------------- | |||||
| DistrhoPluginKars::DistrhoPluginKars() | |||||
| : Plugin(paramCount, 0, 0), // 0 programs, 0 states | |||||
| fSustain(false), | |||||
| fSampleRate(getSampleRate()), | |||||
| fBlockStart(0) | |||||
| { | |||||
| for (int i=kMaxNotes; --i >= 0;) | |||||
| { | |||||
| fNotes[i].index = i; | |||||
| fNotes[i].setSampleRate(fSampleRate); | |||||
| } | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // Init | |||||
| void DistrhoPluginKars::initParameter(uint32_t index, Parameter& parameter) | |||||
| { | |||||
| if (index != 0) | |||||
| return; | |||||
| parameter.hints = kParameterIsAutomable|kParameterIsBoolean; | |||||
| parameter.name = "Sustain"; | |||||
| parameter.symbol = "sustain"; | |||||
| parameter.ranges.def = 0.0f; | |||||
| parameter.ranges.min = 0.0f; | |||||
| parameter.ranges.max = 1.0f; | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // Internal data | |||||
| float DistrhoPluginKars::getParameterValue(uint32_t index) const | |||||
| { | |||||
| if (index != 0) | |||||
| return 0.0f; | |||||
| return fSustain ? 1.0f : 0.0f; | |||||
| } | |||||
| void DistrhoPluginKars::setParameterValue(uint32_t index, float value) | |||||
| { | |||||
| if (index != 0) | |||||
| return; | |||||
| fSustain = value > 0.5f; | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // Process | |||||
| void DistrhoPluginKars::activate() | |||||
| { | |||||
| fBlockStart = 0; | |||||
| for (int i=kMaxNotes; --i >= 0;) | |||||
| { | |||||
| fNotes[i].on = kNoteNull; | |||||
| fNotes[i].off = kNoteNull; | |||||
| fNotes[i].velocity = 0; | |||||
| } | |||||
| } | |||||
| void DistrhoPluginKars::run(const float**, float** outputs, uint32_t frames, const MidiEvent* midiEvents, uint32_t midiEventCount) | |||||
| { | |||||
| uint8_t note, velo; | |||||
| float* out = outputs[0]; | |||||
| for (uint32_t count, pos=0, curEventIndex=0; pos<frames;) | |||||
| { | |||||
| for (;curEventIndex < midiEventCount && pos >= midiEvents[curEventIndex].frame; ++curEventIndex) | |||||
| { | |||||
| if (midiEvents[curEventIndex].size > MidiEvent::kDataSize) | |||||
| continue; | |||||
| const uint8_t* data = midiEvents[curEventIndex].data; | |||||
| const uint8_t status = data[0] & 0xF0; | |||||
| switch (status) | |||||
| { | |||||
| case 0x90: | |||||
| note = data[1]; | |||||
| velo = data[2]; | |||||
| DISTRHO_SAFE_ASSERT_BREAK(note < 128); // kMaxNotes | |||||
| if (velo > 0) | |||||
| { | |||||
| fNotes[note].on = fBlockStart + midiEvents[curEventIndex].frame; | |||||
| fNotes[note].off = kNoteNull; | |||||
| fNotes[note].velocity = velo; | |||||
| break; | |||||
| } | |||||
| // nobreak | |||||
| case 0x80: | |||||
| note = data[1]; | |||||
| DISTRHO_SAFE_ASSERT_BREAK(note < 128); // kMaxNotes | |||||
| fNotes[note].off = fBlockStart + midiEvents[curEventIndex].frame; | |||||
| break; | |||||
| } | |||||
| } | |||||
| if (curEventIndex < midiEventCount && midiEvents[curEventIndex].frame < frames) | |||||
| count = midiEvents[curEventIndex].frame - pos; | |||||
| else | |||||
| count = frames - pos; | |||||
| std::memset(out+pos, 0, sizeof(float)*count); | |||||
| //for (uint32_t i=0; i<count; ++i) | |||||
| // out[pos + i] = 0.0f; | |||||
| for (int i=kMaxNotes; --i >= 0;) | |||||
| { | |||||
| if (fNotes[i].on != kNoteNull) | |||||
| addSamples(out, i, pos, count); | |||||
| } | |||||
| pos += count; | |||||
| } | |||||
| fBlockStart += frames; | |||||
| } | |||||
| void DistrhoPluginKars::addSamples(float* out, int voice, uint32_t offset, uint32_t count) | |||||
| { | |||||
| const uint32_t start = fBlockStart + offset; | |||||
| Note& note(fNotes[voice]); | |||||
| if (start < note.on) | |||||
| return; | |||||
| if (start == note.on) | |||||
| { | |||||
| for (int i=note.sizei; --i >= 0;) | |||||
| note.wavetable[i] = (float(rand()) / float(RAND_MAX)) * 2.0f - 1.0f; | |||||
| } | |||||
| const float vgain = float(note.velocity) / 127.0f; | |||||
| bool decay; | |||||
| float gain, sample; | |||||
| uint32_t index, size; | |||||
| for (uint32_t i=0, s=start-note.on; i<count; ++i, ++s) | |||||
| { | |||||
| gain = vgain; | |||||
| if ((! fSustain) && note.off != kNoteNull && note.off < i+start) | |||||
| { | |||||
| // reuse index and size to save some performance. | |||||
| // actual values are release and dist | |||||
| index = 1 + uint32_t(0.01 * fSampleRate); // release, not index | |||||
| size = i + start - note.off; // dist, not size | |||||
| if (size > index) | |||||
| { | |||||
| note.on = kNoteNull; | |||||
| break; | |||||
| } | |||||
| gain = gain * float(index - size) / float(index); | |||||
| } | |||||
| size = uint32_t(note.sizei); | |||||
| decay = s > size; | |||||
| index = s % size; | |||||
| sample = note.wavetable[index]; | |||||
| if (decay) | |||||
| { | |||||
| if (index == 0) | |||||
| sample += note.wavetable[size-1]; | |||||
| else | |||||
| sample += note.wavetable[index-1]; | |||||
| note.wavetable[index] = sample/2; | |||||
| } | |||||
| out[offset+i] += gain * sample; | |||||
| } | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| Plugin* createPlugin() | |||||
| { | |||||
| return new DistrhoPluginKars(); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | |||||
| @@ -0,0 +1,142 @@ | |||||
| /* | |||||
| * DISTRHO Kars Plugin, based on karplong by Chris Cannam. | |||||
| * Copyright (C) 2015 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
| * or without fee is hereby granted, provided that the above copyright notice and this | |||||
| * permission notice appear in all copies. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
| * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
| * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
| * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
| * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
| */ | |||||
| #ifndef DISTRHO_PLUGIN_KARS_HPP_INCLUDED | |||||
| #define DISTRHO_PLUGIN_KARS_HPP_INCLUDED | |||||
| #include "DistrhoPlugin.hpp" | |||||
| START_NAMESPACE_DISTRHO | |||||
| // ----------------------------------------------------------------------- | |||||
| class DistrhoPluginKars : public Plugin | |||||
| { | |||||
| public: | |||||
| static const int kMaxNotes = 128; | |||||
| static const uint32_t kNoteNull = (uint32_t)-1; | |||||
| enum Parameters | |||||
| { | |||||
| paramSustain = 0, | |||||
| paramCount | |||||
| }; | |||||
| DistrhoPluginKars(); | |||||
| protected: | |||||
| // ------------------------------------------------------------------- | |||||
| // Information | |||||
| const char* getLabel() const noexcept override | |||||
| { | |||||
| return "Kars"; | |||||
| } | |||||
| const char* getMaker() const noexcept override | |||||
| { | |||||
| return "falkTX"; | |||||
| } | |||||
| const char* getLicense() const noexcept override | |||||
| { | |||||
| return "GPL v2+"; | |||||
| } | |||||
| uint32_t getVersion() const noexcept override | |||||
| { | |||||
| return 0x1000; | |||||
| } | |||||
| int64_t getUniqueId() const noexcept override | |||||
| { | |||||
| return d_cconst('D', 'K', 'r', 's'); | |||||
| } | |||||
| // ------------------------------------------------------------------- | |||||
| // Init | |||||
| void initParameter(uint32_t index, Parameter& parameter) override; | |||||
| // ------------------------------------------------------------------- | |||||
| // Internal data | |||||
| float getParameterValue(uint32_t index) const override; | |||||
| void setParameterValue(uint32_t index, float value) override; | |||||
| // ------------------------------------------------------------------- | |||||
| // Process | |||||
| void activate() override; | |||||
| void run(const float**, float** outputs, uint32_t frames, const MidiEvent* midiEvents, uint32_t midiEventCount) override; | |||||
| // ------------------------------------------------------------------- | |||||
| private: | |||||
| bool fSustain; | |||||
| double fSampleRate; | |||||
| uint32_t fBlockStart; | |||||
| struct Note { | |||||
| uint32_t on; | |||||
| uint32_t off; | |||||
| uint8_t velocity; | |||||
| float index; | |||||
| float size; | |||||
| int sizei; | |||||
| float* wavetable; | |||||
| Note() noexcept | |||||
| : on(kNoteNull), | |||||
| off(kNoteNull), | |||||
| velocity(0), | |||||
| index(0.0f), | |||||
| size(0.0f), | |||||
| wavetable(nullptr) {} | |||||
| ~Note() noexcept | |||||
| { | |||||
| if (wavetable != nullptr) | |||||
| { | |||||
| delete[] wavetable; | |||||
| wavetable = nullptr; | |||||
| } | |||||
| } | |||||
| void setSampleRate(const double sampleRate) | |||||
| { | |||||
| if (wavetable != nullptr) | |||||
| delete[] wavetable; | |||||
| const float frequency = 440.0f * std::pow(2.0f, (index - 69.0f) / 12.0f); | |||||
| size = sampleRate / frequency; | |||||
| sizei = int(size)+1; | |||||
| wavetable = new float[sizei]; | |||||
| std::memset(wavetable, 0, sizeof(float)*static_cast<size_t>(sizei)); | |||||
| } | |||||
| } fNotes[kMaxNotes]; | |||||
| void addSamples(float* out, int voice, uint32_t offset, uint32_t count); | |||||
| DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DistrhoPluginKars) | |||||
| }; | |||||
| // ----------------------------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | |||||
| #endif // DISTRHO_PLUGIN_KARS_HPP_INCLUDED | |||||
| @@ -0,0 +1,77 @@ | |||||
| /* | |||||
| * DISTRHO Kars Plugin, based on karplong by Chris Cannam. | |||||
| * Copyright (C) 2015 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
| * or without fee is hereby granted, provided that the above copyright notice and this | |||||
| * permission notice appear in all copies. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
| * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
| * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
| * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
| * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
| */ | |||||
| #include "DistrhoPluginKars.hpp" | |||||
| #include "DistrhoUIKars.hpp" | |||||
| START_NAMESPACE_DISTRHO | |||||
| namespace Art = DistrhoArtworkKars; | |||||
| // ----------------------------------------------------------------------- | |||||
| DistrhoUIKars::DistrhoUIKars() | |||||
| : UI(Art::backgroundWidth, Art::backgroundHeight), | |||||
| fImgBackground(Art::backgroundData, Art::backgroundWidth, Art::backgroundHeight) | |||||
| { | |||||
| // sustain switch | |||||
| Image switchImageNormal(Art::switchData, Art::switchWidth, Art::switchHeight); | |||||
| Image switchImageDown(Art::switchData, Art::switchWidth, Art::switchHeight); | |||||
| fSwitchSustain = new ImageSwitch(this, switchImageNormal, switchImageDown); | |||||
| fSwitchSustain->setAbsolutePos(505, 5); | |||||
| fSwitchSustain->setId(DistrhoPluginKars::paramSustain); | |||||
| fSwitchSustain->setCallback(this); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // DSP Callbacks | |||||
| void DistrhoUIKars::parameterChanged(uint32_t index, float value) | |||||
| { | |||||
| if (index != 0) | |||||
| return; | |||||
| fSwitchSustain->setDown(value > 0.5f); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| // Widget Callbacks | |||||
| void DistrhoUIKars::imageSwitchClicked(ImageSwitch* imageSwitch, bool down) | |||||
| { | |||||
| if (imageSwitch != fSwitchSustain) | |||||
| return; | |||||
| editParameter(DistrhoPluginKars::paramSustain, true); | |||||
| setParameterValue(DistrhoPluginKars::paramSustain, down ? 1.0f : 0.0f); | |||||
| editParameter(DistrhoPluginKars::paramSustain, false); | |||||
| } | |||||
| void DistrhoUIKars::onDisplay() | |||||
| { | |||||
| fImgBackground.draw(); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| UI* createUI() | |||||
| { | |||||
| return new DistrhoUIKars(); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | |||||
| @@ -0,0 +1,60 @@ | |||||
| /* | |||||
| * DISTRHO Kars Plugin, based on karplong by Chris Cannam. | |||||
| * Copyright (C) 2015 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
| * or without fee is hereby granted, provided that the above copyright notice and this | |||||
| * permission notice appear in all copies. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
| * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
| * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
| * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
| * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
| */ | |||||
| #ifndef DISTRHO_UI_KARS_HPP_INCLUDED | |||||
| #define DISTRHO_UI_KARS_HPP_INCLUDED | |||||
| #include "DistrhoUI.hpp" | |||||
| #include "ImageWidgets.hpp" | |||||
| #include "DistrhoArtworkKars.hpp" | |||||
| START_NAMESPACE_DISTRHO | |||||
| // ----------------------------------------------------------------------- | |||||
| class DistrhoUIKars : public UI, | |||||
| public ImageSwitch::Callback | |||||
| { | |||||
| public: | |||||
| DistrhoUIKars(); | |||||
| protected: | |||||
| // ------------------------------------------------------------------- | |||||
| // DSP Callbacks | |||||
| void parameterChanged(uint32_t index, float value) override; | |||||
| // ------------------------------------------------------------------- | |||||
| // Widget Callbacks | |||||
| void imageSwitchClicked(ImageSwitch* imageSwitch, bool down) override; | |||||
| void onDisplay() override; | |||||
| private: | |||||
| Image fImgBackground; | |||||
| ScopedPointer<ImageSwitch> fSwitchSustain; | |||||
| DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DistrhoUIKars) | |||||
| }; | |||||
| // ----------------------------------------------------------------------- | |||||
| END_NAMESPACE_DISTRHO | |||||
| #endif // DISTRHO_UI_KARS_HPP_INCLUDED | |||||
| @@ -0,0 +1,55 @@ | |||||
| #!/usr/bin/make -f | |||||
| # Makefile for DISTRHO Plugins # | |||||
| # ---------------------------- # | |||||
| # Created by falkTX | |||||
| # | |||||
| # -------------------------------------------------------------- | |||||
| # Project name, used for binaries | |||||
| NAME = Kars | |||||
| # -------------------------------------------------------------- | |||||
| # Files to build | |||||
| OBJS_DSP = \ | |||||
| DistrhoPluginKars.cpp.o | |||||
| OBJS_UI = \ | |||||
| DistrhoArtworkKars.cpp.o \ | |||||
| DistrhoUIKars.cpp.o | |||||
| # -------------------------------------------------------------- | |||||
| # Do some magic | |||||
| include ../Makefile.mk | |||||
| # -------------------------------------------------------------- | |||||
| # Enable all possible plugin types | |||||
| ifeq ($(HAVE_DGL),true) | |||||
| ifeq ($(HAVE_JACK),true) | |||||
| TARGETS += jack | |||||
| endif | |||||
| endif | |||||
| ifeq ($(LINUX),true) | |||||
| TARGETS += dssi_dsp | |||||
| ifeq ($(HAVE_DGL),true) | |||||
| ifeq ($(HAVE_LIBLO),true) | |||||
| TARGETS += dssi_ui | |||||
| endif | |||||
| endif | |||||
| endif | |||||
| ifeq ($(HAVE_DGL),true) | |||||
| TARGETS += lv2_sep | |||||
| else | |||||
| TARGETS += lv2_dsp | |||||
| endif | |||||
| TARGETS += vst | |||||
| all: $(TARGETS) | |||||
| # -------------------------------------------------------------- | |||||
| @@ -0,0 +1,153 @@ | |||||
| #!/usr/bin/make -f | |||||
| # Makefile for DISTRHO Plugins # | |||||
| # ---------------------------- # | |||||
| # Created by falkTX | |||||
| # | |||||
| # NAME, OBJS_DSP and OBJS_UI have been defined before | |||||
| include ../../Makefile.mk | |||||
| ifeq ($(OBJS_UI),) | |||||
| HAVE_DGL = false | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Basic setup | |||||
| TARGET_DIR = ../../bin | |||||
| BUILD_C_FLAGS += -I. | |||||
| BUILD_CXX_FLAGS += -I. -I../../dpf/distrho -I../../dpf/dgl | |||||
| ifeq ($(HAVE_DGL),true) | |||||
| BASE_FLAGS += -DHAVE_DGL | |||||
| endif | |||||
| ifeq ($(HAVE_JACK),true) | |||||
| BASE_FLAGS += -DHAVE_JACK | |||||
| endif | |||||
| ifeq ($(HAVE_LIBLO),true) | |||||
| BASE_FLAGS += -DHAVE_LIBLO | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Set plugin binary file targets | |||||
| jack = $(TARGET_DIR)/$(NAME)$(APP_EXT) | |||||
| ladspa_dsp = $(TARGET_DIR)/$(NAME)-ladspa$(LIB_EXT) | |||||
| dssi_dsp = $(TARGET_DIR)/$(NAME)-dssi$(LIB_EXT) | |||||
| dssi_ui = $(TARGET_DIR)/$(NAME)-dssi/$(NAME)_ui$(APP_EXT) | |||||
| lv2 = $(TARGET_DIR)/$(NAME).lv2/$(NAME)$(LIB_EXT) | |||||
| lv2_dsp = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_dsp$(LIB_EXT) | |||||
| lv2_ui = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_ui$(LIB_EXT) | |||||
| vst = $(TARGET_DIR)/$(NAME)-vst$(LIB_EXT) | |||||
| # -------------------------------------------------------------- | |||||
| # Set distrho code files | |||||
| DISTRHO_PLUGIN_FILES = ../../dpf/distrho/DistrhoPluginMain.cpp | |||||
| ifeq ($(HAVE_DGL),true) | |||||
| DISTRHO_UI_FILES = ../../dpf/distrho/DistrhoUIMain.cpp ../../dpf/libdgl.a | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # Handle plugins without UI | |||||
| ifneq ($(HAVE_DGL),true) | |||||
| dssi_ui = | |||||
| lv2_ui = | |||||
| DISTRHO_UI_FILES = | |||||
| DGL_LIBS = | |||||
| OBJS_UI = | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||
| # all needs to be first | |||||
| all: | |||||
| # -------------------------------------------------------------- | |||||
| # Common | |||||
| %.c.o: %.c | |||||
| $(CC) $< $(BUILD_C_FLAGS) -MD -MP -c -o $@ | |||||
| %.cpp.o: %.cpp | |||||
| $(CXX) $< $(BUILD_CXX_FLAGS) -MD -MP -c -o $@ | |||||
| clean: | |||||
| rm -f *.d *.o | |||||
| rm -rf $(TARGET_DIR)/$(NAME) $(TARGET_DIR)/$(NAME)-* $(TARGET_DIR)/$(NAME).lv2/ | |||||
| # -------------------------------------------------------------- | |||||
| # JACK | |||||
| jack: $(jack) | |||||
| $(jack): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -lpthread $(DGL_LIBS) $(shell pkg-config --cflags --libs jack) -DDISTRHO_PLUGIN_TARGET_JACK -o $@ | |||||
| # -------------------------------------------------------------- | |||||
| # LADSPA | |||||
| ladspa: $(ladspa_dsp) | |||||
| $(ladspa_dsp): $(OBJS_DSP) $(DISTRHO_PLUGIN_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -lpthread $(SHARED) -DDISTRHO_PLUGIN_TARGET_LADSPA -o $@ | |||||
| # -------------------------------------------------------------- | |||||
| # DSSI | |||||
| dssi: $(dssi_dsp) $(dssi_ui) | |||||
| dssi_dsp: $(dssi_dsp) | |||||
| dssi_ui: $(dssi_ui) | |||||
| $(dssi_dsp): $(OBJS_DSP) $(DISTRHO_PLUGIN_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -lpthread $(SHARED) -DDISTRHO_PLUGIN_TARGET_DSSI -o $@ | |||||
| $(dssi_ui): $(OBJS_UI) $(DISTRHO_UI_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell pkg-config --cflags --libs liblo) -DDISTRHO_PLUGIN_TARGET_DSSI -o $@ | |||||
| # -------------------------------------------------------------- | |||||
| # LV2 | |||||
| lv2_one: $(lv2) | |||||
| lv2_dsp: $(lv2_dsp) | |||||
| lv2_sep: $(lv2_dsp) $(lv2_ui) | |||||
| $(lv2): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -lpthread $(DGL_LIBS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_LV2 -o $@ | |||||
| $(lv2_dsp): $(OBJS_DSP) $(DISTRHO_PLUGIN_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -lpthread $(SHARED) -DDISTRHO_PLUGIN_TARGET_LV2 -o $@ | |||||
| $(lv2_ui): $(OBJS_UI) $(DISTRHO_UI_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_LV2 -o $@ | |||||
| # -------------------------------------------------------------- | |||||
| # VST | |||||
| vst: $(vst) | |||||
| $(vst): $(OBJS_DSP) $(OBJS_UI) $(DISTRHO_PLUGIN_FILES) $(DISTRHO_UI_FILES) | |||||
| mkdir -p $(shell dirname $@) | |||||
| $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -lpthread $(DGL_LIBS) $(SHARED) -DDISTRHO_PLUGIN_TARGET_VST -o $@ | |||||
| # -------------------------------------------------------------- | |||||
| -include $(OBJS_DSP:%.o=%.d) | |||||
| ifeq ($(HAVE_DGL),true) | |||||
| -include $(OBJS_UI:%.o=%.d) | |||||
| endif | |||||
| # -------------------------------------------------------------- | |||||