Date: Sunday, March 15, 2020 @ 16:57:14 Author: dvzrv Revision: 598360
archrelease: copy trunk to community-x86_64 Added: guitarix/repos/community-x86_64/PKGBUILD (from rev 598359, guitarix/trunk/PKGBUILD) guitarix/repos/community-x86_64/guitarix-0.39.0-fix_faust_and_lv2_plugins.patch (from rev 598359, guitarix/trunk/guitarix-0.39.0-fix_faust_and_lv2_plugins.patch) Deleted: guitarix/repos/community-x86_64/PKGBUILD -------------------------------------------------+ PKGBUILD | 86 guitarix-0.39.0-fix_faust_and_lv2_plugins.patch | 3296 ++++++++++++++++++++++ 2 files changed, 3342 insertions(+), 40 deletions(-) Deleted: PKGBUILD =================================================================== --- PKGBUILD 2020-03-15 16:56:56 UTC (rev 598359) +++ PKGBUILD 2020-03-15 16:57:14 UTC (rev 598360) @@ -1,40 +0,0 @@ -# Maintainer: David Runge <dv...@archlinux.org - -pkgname=guitarix -pkgver=0.39.0 -pkgrel=2 -pkgdesc="A simple mono guitar amplifier and FX for JACK using Faust" -arch=('x86_64') -url="https://guitarix.org" -license=('GPL3') -groups=('ladspa-plugins' 'lv2-plugins' 'pro-audio') -depends=('avahi' 'bluez-libs' 'cairo' 'cairomm' 'gcc-libs' 'gdk-pixbuf2' -'glib2' 'glibc' 'glibmm' 'gtk2' 'gtkmm' 'libboost_iostreams.so' 'libcurl.so' -'libjack.so' 'liblilv-0.so' 'liblrdf.so' 'libsndfile.so' 'libzita-convolver.so' -'libzita-resampler.so' 'pango' 'pangomm' 'ttf-roboto') -makedepends=('boost' 'eigen' 'gperf' 'intltool' 'ladspa' 'lv2' 'waf') -provides=('libgxw.so' 'libgxwmm.so') -replaces=('guitarix2') -source=("${pkgname}-${pkgver}.tar.xz::https://download.sourceforge.net/project/guitarix/guitarix/${pkgname}2-${pkgver}.tar.xz") -sha512sums=('5eb799498385ab9aa865e3f5a7e79d77f7f62c9bd7ad6875ec32bdec85829ed5b84bed3b0eab786ce74088fe2e1d53080f70afcb25ab1ef8d8f78a676b4947df') - -build() { - cd "${pkgname}-${pkgver}" - # when building with faust 2.20.2 it fails: https://sourceforge.net/p/guitarix/bugs/86/ - waf configure --prefix=/usr \ - --enable-nls \ - --ladspa \ - --new-ladspa \ - --no-faust \ - --shared-lib \ - --lib-dev \ - --ldflags="${LDFLAGS}" - waf build -vv -} - -package() { - cd "${pkgname}-${pkgver}" - waf install --destdir="${pkgdir}" - # docs - install -vDm 644 {changelog,README} -t "${pkgdir}/usr/share/doc/${pkgname}/" -} Copied: guitarix/repos/community-x86_64/PKGBUILD (from rev 598359, guitarix/trunk/PKGBUILD) =================================================================== --- PKGBUILD (rev 0) +++ PKGBUILD 2020-03-15 16:57:14 UTC (rev 598360) @@ -0,0 +1,46 @@ +# Maintainer: David Runge <dv...@archlinux.org + +pkgname=guitarix +pkgver=0.39.0 +pkgrel=3 +pkgdesc="A simple mono guitar amplifier and FX for JACK using Faust" +arch=('x86_64') +url="https://guitarix.org" +license=('GPL3') +groups=('ladspa-plugins' 'lv2-plugins' 'pro-audio') +depends=('avahi' 'bluez-libs' 'cairo' 'cairomm' 'gcc-libs' 'gdk-pixbuf2' +'glib2' 'glibc' 'glibmm' 'gtk2' 'gtkmm' 'libboost_iostreams.so' 'libcurl.so' +'libjack.so' 'liblilv-0.so' 'liblrdf.so' 'libsndfile.so' 'libzita-convolver.so' +'libzita-resampler.so' 'pango' 'pangomm' 'ttf-roboto') +makedepends=('boost' 'eigen' 'faust' 'gperf' 'intltool' 'ladspa' 'lv2' 'waf') +provides=('libgxw.so' 'libgxwmm.so') +replaces=('guitarix2') +source=("${pkgname}-${pkgver}.tar.xz::https://download.sourceforge.net/project/guitarix/guitarix/${pkgname}2-${pkgver}.tar.xz" + "${pkgname}-0.39.0-fix_faust_and_lv2_plugins.patch") +sha512sums=('5eb799498385ab9aa865e3f5a7e79d77f7f62c9bd7ad6875ec32bdec85829ed5b84bed3b0eab786ce74088fe2e1d53080f70afcb25ab1ef8d8f78a676b4947df' + '19e1573ced97e87dc8b64dcfcb5f9eff01650600fee317e0d75824550e0ac614ec06a98668c34c2d64c9043085318c07de7cce4c1e0a39be61b2fe613c6148b5') + +prepare() { + cd "${pkgname}-${pkgver}" + patch -Np2 -i "../${pkgname}-0.39.0-fix_faust_and_lv2_plugins.patch" +} + +build() { + cd "${pkgname}-${pkgver}" + # when building with faust 2.20.2 it fails: https://sourceforge.net/p/guitarix/bugs/86/ + waf configure --prefix=/usr \ + --enable-nls \ + --ladspa \ + --new-ladspa \ + --shared-lib \ + --lib-dev \ + --ldflags="${LDFLAGS}" + waf build -vv +} + +package() { + cd "${pkgname}-${pkgver}" + waf install --destdir="${pkgdir}" + # docs + install -vDm 644 {changelog,README} -t "${pkgdir}/usr/share/doc/${pkgname}/" +} Copied: guitarix/repos/community-x86_64/guitarix-0.39.0-fix_faust_and_lv2_plugins.patch (from rev 598359, guitarix/trunk/guitarix-0.39.0-fix_faust_and_lv2_plugins.patch) =================================================================== --- guitarix-0.39.0-fix_faust_and_lv2_plugins.patch (rev 0) +++ guitarix-0.39.0-fix_faust_and_lv2_plugins.patch 2020-03-15 16:57:14 UTC (rev 598360) @@ -0,0 +1,3296 @@ +From 949555d976d8cb3cd98be56ebe464ce7f859007b Mon Sep 17 00:00:00 2001 +From: brummer10 <brumm...@web.de> +Date: Tue, 14 Jan 2020 18:59:07 +0100 +Subject: [PATCH 1/8] fix issue #86 + +--- + trunk/src/LV2/faust-generated/highbooster.cc | 4 ++-- + trunk/src/LV2/faust/highbooster.dsp | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/trunk/src/LV2/faust-generated/highbooster.cc b/trunk/src/LV2/faust-generated/highbooster.cc +index 91a19fea..35c95ae9 100644 +--- a/trunk/src/LV2/faust-generated/highbooster.cc ++++ b/trunk/src/LV2/faust-generated/highbooster.cc +@@ -72,7 +72,7 @@ inline void Dsp::init(uint32_t samplingFreq) + fConst3 = (0.0 - (1.0 / (fConst2 * fConst0))); + fConst4 = (1.0 / fConst2); + fConst5 = (1.0 - fConst1); +- fVslider0 = FAUSTFLOAT(0.0); ++ fVslider0 = FAUSTFLOAT(0.5); + clear_state_f(); + } + +@@ -107,7 +107,7 @@ void Dsp::connect(uint32_t port,void* data) + switch ((PortIndex)port) + { + case LEVEL: +- fVslider0_ = (float*)data; // , 0.0, 0.5, 20.0, 0.5 ++ fVslider0_ = (float*)data; // , 0.5, 0.0, 20.0, 0.5 + break; + default: + break; +diff --git a/trunk/src/LV2/faust/highbooster.dsp b/trunk/src/LV2/faust/highbooster.dsp +index af4d839a..67a1df85 100644 +--- a/trunk/src/LV2/faust/highbooster.dsp ++++ b/trunk/src/LV2/faust/highbooster.dsp +@@ -3,7 +3,7 @@ declare category "Tone Control"; + + import("stdfaust.lib"); + +-level = vslider("Level", 0, 0.5, 20, 0.5) ; ++level = vslider("Level", 0.5, 0.0, 20, 0.5) ; + hfboost(level,fx,x) = x + (ba.db2linear(level)-1)*fi.highpass(1,fx,x); + + process = hfboost(level, 1500); +-- +2.25.1 + + +From a021bf7de6beae98f8c84a0b48b3a578aa8c19cf Mon Sep 17 00:00:00 2001 +From: brummer10 <brumm...@web.de> +Date: Mon, 20 Jan 2020 07:32:47 +0100 +Subject: [PATCH 2/8] rename src/LV2/gx_wah.lv2 to src/LV2/gx_colwah.lv2 to + avoid install of empty LV2 bundle + +--- + trunk/src/LV2/gx_colwah.lv2/gx_colwah.cpp | 254 ++++++++++++++ + trunk/src/LV2/gx_colwah.lv2/gx_colwah.h | 42 +++ + trunk/src/LV2/gx_colwah.lv2/gx_colwah.ttl | 141 ++++++++ + trunk/src/LV2/gx_colwah.lv2/gx_colwah_gui.cpp | 314 ++++++++++++++++++ + trunk/src/LV2/gx_colwah.lv2/manifest.ttl.in | 26 ++ + trunk/src/LV2/gx_colwah.lv2/modgui.ttl | 2 + + trunk/src/LV2/gx_colwah.lv2/wah.h | 26 ++ + trunk/src/LV2/gx_colwah.lv2/widget.cpp | 268 +++++++++++++++ + trunk/src/LV2/gx_colwah.lv2/widget.h | 96 ++++++ + trunk/src/LV2/gx_colwah.lv2/wscript | 62 ++++ + 10 files changed, 1231 insertions(+) + create mode 100644 trunk/src/LV2/gx_colwah.lv2/gx_colwah.cpp + create mode 100644 trunk/src/LV2/gx_colwah.lv2/gx_colwah.h + create mode 100644 trunk/src/LV2/gx_colwah.lv2/gx_colwah.ttl + create mode 100644 trunk/src/LV2/gx_colwah.lv2/gx_colwah_gui.cpp + create mode 100644 trunk/src/LV2/gx_colwah.lv2/manifest.ttl.in + create mode 100644 trunk/src/LV2/gx_colwah.lv2/modgui.ttl + create mode 100644 trunk/src/LV2/gx_colwah.lv2/wah.h + create mode 100644 trunk/src/LV2/gx_colwah.lv2/widget.cpp + create mode 100644 trunk/src/LV2/gx_colwah.lv2/widget.h + create mode 100644 trunk/src/LV2/gx_colwah.lv2/wscript + +diff --git a/trunk/src/LV2/gx_colwah.lv2/gx_colwah.cpp b/trunk/src/LV2/gx_colwah.lv2/gx_colwah.cpp +new file mode 100644 +index 00000000..331cf3fb +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/gx_colwah.cpp +@@ -0,0 +1,254 @@ ++/* ++ * Copyright (C) 2014 Guitarix project MOD project ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * -------------------------------------------------------------------------- ++ */ ++ ++ ++////////////////////////////// LOCAL INCLUDES ////////////////////////// ++ ++#include "gx_common.h" // faust support and denormal protection (SSE) ++#include "gx_colwah.h" // define struct PortIndex ++#include "gx_pluginlv2.h" // define struct PluginLV2 ++#include "wah.h" // dsp class generated by faust -> dsp2cc ++ ++////////////////////////////// PLUG-IN CLASS /////////////////////////// ++ ++#define declare(n) namespace n { PluginLV2 *plugin(); } ++ ++declare(colwah); ++declare(dallaswah); ++declare(foxwah); ++declare(jenwah); ++declare(maestrowah); ++declare(selwah); ++declare(voxwah); ++ ++static plug wah_model [] = { ++ colwah::plugin, //0 ++ dallaswah::plugin, //1 ++ foxwah::plugin, //2 ++ jenwah::plugin, //3 ++ maestrowah::plugin, //4 ++ selwah::plugin, //5 ++ voxwah::plugin, //6 ++}; ++ ++static const size_t WAH_COUNT = sizeof(wah_model) / sizeof(wah_model[0]); ++ ++ ++namespace colwah { ++ ++class Gx_colwah_ ++{ ++private: ++ // pointer to buffer ++ float* output; ++ float* input; ++ // pointer to dsp class ++ PluginLV2* wah[WAH_COUNT]; ++ float* wahh_model; ++ uint32_t wah_model_; ++ uint32_t wah_max; ++ // private functions ++ inline void run_dsp_(uint32_t n_samples); ++ inline void connect_(uint32_t port,void* data); ++ inline void init_dsp_(uint32_t rate); ++ inline void connect_all__ports(uint32_t port, void* data); ++ inline void activate_f(); ++ inline void clean_up(); ++ inline void deactivate_f(); ++ ++public: ++ // LV2 Descriptor ++ static const LV2_Descriptor descriptor; ++ // static wrapper to private functions ++ static void deactivate(LV2_Handle instance); ++ static void cleanup(LV2_Handle instance); ++ static void run(LV2_Handle instance, uint32_t n_samples); ++ static void activate(LV2_Handle instance); ++ static void connect_port(LV2_Handle instance, uint32_t port, void* data); ++ static LV2_Handle instantiate(const LV2_Descriptor* descriptor, ++ double rate, const char* bundle_path, ++ const LV2_Feature* const* features); ++ Gx_colwah_(); ++ ~Gx_colwah_(); ++}; ++ ++// constructor ++Gx_colwah_::Gx_colwah_() : ++ output(NULL), ++ input(NULL), ++ wahh_model(NULL), ++ wah_model_(0) {}; ++ ++// destructor ++Gx_colwah_::~Gx_colwah_() ++{ ++ for(uint32_t i=0; i<WAH_COUNT; i++) { ++ wah[i]->delete_instance(wah[i]); ++ } ++ ++}; ++ ++///////////////////////// PRIVATE CLASS FUNCTIONS ///////////////////// ++ ++void Gx_colwah_::init_dsp_(uint32_t rate) ++{ ++ AVOIDDENORMALS(); // init the SSE denormal protection ++ ++ for(uint32_t i=0; i<WAH_COUNT; i++) { ++ wah[i] = wah_model[i](); ++ wah[i]->set_samplerate(rate, wah[i]); ++ } ++ wah_max = WAH_COUNT-1; ++} ++ ++// connect the Ports used by the plug-in class ++void Gx_colwah_::connect_(uint32_t port,void* data) ++{ ++ switch ((PortIndex)port) ++ { ++ case EFFECTS_OUTPUT: ++ output = static_cast<float*>(data); ++ break; ++ case EFFECTS_INPUT: ++ input = static_cast<float*>(data); ++ break; ++ case MODEL: ++ wahh_model = static_cast<float*>(data); ++ break; ++ default: ++ break; ++ } ++} ++ ++void Gx_colwah_::activate_f() ++{ ++ // allocate the internal DSP mem ++} ++ ++void Gx_colwah_::clean_up() ++{ ++ // delete the internal DSP mem ++} ++ ++void Gx_colwah_::deactivate_f() ++{ ++ // delete the internal DSP mem ++} ++ ++void Gx_colwah_::run_dsp_(uint32_t n_samples) ++{ ++ if (n_samples< 1) return; ++ wah_model_ = min(wah_max, static_cast<uint32_t>(*(wahh_model))); ++ wah[wah_model_]->mono_audio(static_cast<int>(n_samples), input, output, wah[wah_model_]); ++} ++ ++void Gx_colwah_::connect_all__ports(uint32_t port, void* data) ++{ ++ // connect the Ports used by the plug-in class ++ connect_(port,data); ++ // connect the Ports used by the DSP class ++ for(uint32_t i=0; i<WAH_COUNT; i++) { ++ wah[i]->connect_ports(port, data, wah[i]); ++ } ++} ++ ++////////////////////// STATIC CLASS FUNCTIONS //////////////////////// ++ ++LV2_Handle ++Gx_colwah_::instantiate(const LV2_Descriptor* descriptor, ++ double rate, const char* bundle_path, ++ const LV2_Feature* const* features) ++{ ++ // init the plug-in class ++ Gx_colwah_ *self = new Gx_colwah_(); ++ if (!self) ++ { ++ return NULL; ++ } ++ ++ self->init_dsp_((uint32_t)rate); ++ ++ return (LV2_Handle)self; ++} ++ ++void Gx_colwah_::connect_port(LV2_Handle instance, ++ uint32_t port, void* data) ++{ ++ // connect all ports ++ static_cast<Gx_colwah_*>(instance)->connect_all__ports(port, data); ++} ++ ++void Gx_colwah_::activate(LV2_Handle instance) ++{ ++ // allocate needed mem ++ static_cast<Gx_colwah_*>(instance)->activate_f(); ++} ++ ++void Gx_colwah_::run(LV2_Handle instance, uint32_t n_samples) ++{ ++ // run dsp ++ static_cast<Gx_colwah_*>(instance)->run_dsp_(n_samples); ++} ++ ++void Gx_colwah_::deactivate(LV2_Handle instance) ++{ ++ // free allocated mem ++ static_cast<Gx_colwah_*>(instance)->deactivate_f(); ++} ++ ++void Gx_colwah_::cleanup(LV2_Handle instance) ++{ ++ // well, clean up after us ++ Gx_colwah_* self = static_cast<Gx_colwah_*>(instance); ++ self->clean_up(); ++ delete self; ++} ++ ++const LV2_Descriptor Gx_colwah_::descriptor = ++{ ++ GXPLUGIN_URI "#_colwah_", ++ Gx_colwah_::instantiate, ++ Gx_colwah_::connect_port, ++ Gx_colwah_::activate, ++ Gx_colwah_::run, ++ Gx_colwah_::deactivate, ++ Gx_colwah_::cleanup, ++ NULL ++}; ++ ++ ++} // end namespace colwah ++ ++////////////////////////// LV2 SYMBOL EXPORT /////////////////////////// ++ ++extern "C" ++LV2_SYMBOL_EXPORT ++const LV2_Descriptor* ++lv2_descriptor(uint32_t index) ++{ ++ switch (index) ++ { ++ case 0: ++ return &colwah::Gx_colwah_::descriptor; ++ default: ++ return NULL; ++ } ++} ++ ++///////////////////////////// FIN ////////////////////////////////////// +diff --git a/trunk/src/LV2/gx_colwah.lv2/gx_colwah.h b/trunk/src/LV2/gx_colwah.lv2/gx_colwah.h +new file mode 100644 +index 00000000..9b23a29a +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/gx_colwah.h +@@ -0,0 +1,42 @@ ++/* ++ * Copyright (C) 2014 Guitarix project MOD project ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * -------------------------------------------------------------------------- ++ */ ++ ++#pragma once ++ ++#ifndef SRC_HEADERS_GXEFFECTS_H_ ++#define SRC_HEADERS_GXEFFECTS_H_ ++ ++#include <lv2.h> ++ ++#define GXPLUGIN_URI "http://guitarix.sourceforge.net/plugins/gx_colwah_" ++#define GXPLUGIN_UI_URI "http://guitarix.sourceforge.net/plugins/gx_colwah_gui" ++ ++ ++typedef enum ++{ ++ EFFECTS_OUTPUT, ++ EFFECTS_INPUT, ++ WAH, ++ FREQ, ++ MODE, ++ MODEL, ++ WET_DRY, ++} PortIndex; ++ ++#endif //SRC_HEADERS_GXEFFECTS_H_ +diff --git a/trunk/src/LV2/gx_colwah.lv2/gx_colwah.ttl b/trunk/src/LV2/gx_colwah.lv2/gx_colwah.ttl +new file mode 100644 +index 00000000..5ba01ff6 +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/gx_colwah.ttl +@@ -0,0 +1,141 @@ ++# ++# Copyright (C) 2014 Guitarix project MOD project ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++# -------------------------------------------------------------------------- ++# ++ ++ ++@prefix doap: <http://usefulinc.com/ns/doap#> . ++@prefix foaf: <http://xmlns.com/foaf/0.1/> . ++@prefix lv2: <http://lv2plug.in/ns/lv2core#> . ++@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . ++@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . ++@prefix guiext: <http://lv2plug.in/ns/extensions/ui#>. ++@prefix time: <http://lv2plug.in/ns/ext/time#>. ++@prefix units: <http://lv2plug.in/ns/extensions/units#> . ++ ++<http://guitarix.sourceforge.net#me> ++ a foaf:Person ; ++ foaf:name "Guitarix team" ; ++ foaf:mbox <mailto:guitarix-develo...@lists.sourceforge.net> ; ++ rdfs:seeAlso <http://guitarix.sourceforge.net> . ++ ++<http://guitarix.sourceforge.net/plugins/gx_colwah_> ++ a doap:Project ; ++ doap:maintainer <http://guitarix.sourceforge.net#me> ; ++ doap:name "Gx_colwah_" . ++ ++<http://guitarix.sourceforge.net/plugins/gx_colwah_#_colwah_> ++ a lv2:Plugin , ++ lv2:ModulatorPlugin ; ++ doap:maintainer <http://guitarix.sourceforge.net#me> ; ++ doap:name "GxWahwah"; ++ doap:license <http://opensource.org/licenses/isc> ; ++ lv2:project <http://guitarix.sourceforge.net/plugins/gx_colwah_> ; ++ lv2:optionalFeature lv2:hardRTCapable ; ++ ++ lv2:minorVersion 34; ++ lv2:microVersion 0; ++ ++ guiext:ui <http://guitarix.sourceforge.net/plugins/gx_colwah_gui#_colwah_>; ++ ++rdfs:comment """ ++ ++... ++ ++"""; ++ ++ lv2:port [ ++ a lv2:AudioPort , ++ lv2:OutputPort ; ++ lv2:index 0 ; ++ lv2:symbol "out" ; ++ lv2:name "Out" ++ ] , [ ++ a lv2:AudioPort , ++ lv2:InputPort ; ++ lv2:index 1 ; ++ lv2:symbol "in" ; ++ lv2:name "In" ; ++ ] ++ , [ ++ a lv2:InputPort , ++ lv2:ControlPort ; ++ lv2:index 2 ; ++ lv2:symbol "WAH" ; ++ lv2:name "WAH" ; ++ lv2:default 0.0 ; ++ lv2:minimum 0.0 ; ++ lv2:maximum 1.0 ; ++ ] , [ ++ a lv2:InputPort , ++ lv2:ControlPort ; ++ lv2:index 3 ; ++ lv2:symbol "FREQ" ; ++ lv2:name "FREQ" ; ++ lv2:default 24.0 ; ++ lv2:minimum 24.0 ; ++ lv2:maximum 3.6e+02 ; ++ ] , [ ++ a lv2:InputPort , ++ lv2:ControlPort ; ++ lv2:index 4 ; ++ lv2:symbol "MODE" ; ++ lv2:name "MODE" ; ++ lv2:default 0.0 ; ++ lv2:minimum 0.0 ; ++ lv2:maximum 2.0 ; ++ lv2:portProperty lv2:integer; ++ lv2:portProperty lv2:enumeration ; ++ lv2:scalePoint [rdfs:label "manual"; rdf:value 0]; ++ lv2:scalePoint [rdfs:label "auto"; rdf:value 1]; ++ lv2:scalePoint [rdfs:label "alien"; rdf:value 2]; ++ ++ ] , [ ++ a lv2:InputPort , ++ lv2:ControlPort ; ++ lv2:index 5 ; ++ lv2:symbol "MODEL" ; ++ lv2:name "MODEL" ; ++ lv2:default 0.0 ; ++ lv2:minimum 0.0 ; ++ lv2:maximum 6.0 ; ++ lv2:portProperty lv2:integer; ++ lv2:portProperty lv2:enumeration ; ++ lv2:scalePoint [rdfs:label "Colorsound Wah"; rdf:value 0]; ++ lv2:scalePoint [rdfs:label "Dallas Wah"; rdf:value 1]; ++ lv2:scalePoint [rdfs:label "Foxx Wah"; rdf:value 2]; ++ lv2:scalePoint [rdfs:label "Jen Wah"; rdf:value 3]; ++ lv2:scalePoint [rdfs:label "Maestro Wah"; rdf:value 4]; ++ lv2:scalePoint [rdfs:label "SelmerWah"; rdf:value 5]; ++ lv2:scalePoint [rdfs:label "Vox Wah V847"; rdf:value 6]; ++ ++ ] , [ ++ a lv2:InputPort , ++ lv2:ControlPort ; ++ lv2:index 6 ; ++ lv2:symbol "WET_DRY" ; ++ lv2:name "WET_DRY" ; ++ lv2:default 1e+02 ; ++ lv2:minimum 0.0 ; ++ lv2:maximum 1e+02 ; ++ ] . ++ ++<http://guitarix.sourceforge.net/plugins/gx_colwah_gui#_colwah_> ++ a guiext:GtkUI; ++ guiext:binary <gx_colwah_gui.so>; ++ guiext:requiredFeature guiext:makeResident; ++ . +diff --git a/trunk/src/LV2/gx_colwah.lv2/gx_colwah_gui.cpp b/trunk/src/LV2/gx_colwah.lv2/gx_colwah_gui.cpp +new file mode 100644 +index 00000000..449a8d33 +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/gx_colwah_gui.cpp +@@ -0,0 +1,314 @@ ++/* ++ * Copyright (C) 2012 Hermann Meyer, Andreas Degert, Pete Shorthose, Steve Poskitt ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * -------------------------------------------------------------------------- ++ */ ++ ++ ++#include <string> ++#include <iostream> ++ ++#include <gtkmm.h> ++#include "gx_colwah.h" ++#include "widget.h" ++ ++ ++#include <lv2.h> ++#include <lv2/lv2plug.in/ns/extensions/ui/ui.h> ++ ++using namespace std; ++ ++class Gx_colwah_GUI ++{ ++private: ++ Glib::ustring plugskin; ++ Glib::ustring addKnob; ++ Glib::ustring plug_name; ++ void set_knob(Glib::ustring knob); ++ void set_skin(); ++ void set_plug_name(const char * plugin_uri); ++ GtkWidget* make_gui(); ++public: ++ ++ Widget* widget; ++ static void set_plug_name_static(Gx_colwah_GUI *self, const char * plugin_uri) ++ { ++ self->set_plug_name(plugin_uri); ++ } ++ static GtkWidget* make_gui_static(Gx_colwah_GUI *self) ++ { ++ return self->make_gui(); ++ } ++ ++ Gx_colwah_GUI () {}; ++ ~Gx_colwah_GUI () {}; ++} ; ++ ++void Gx_colwah_GUI::set_knob( Glib::ustring knob) ++{ ++ addKnob = " style 'gx_"; ++ addKnob += plug_name; ++ addKnob += "_dark_skin_icons'\n" ++ " { \n" ++ " stock['bigknob'] = {{'"; ++ addKnob += knob; ++ addKnob += ".png'}}\n" ++ " stock['smallknob'] = {{'"; ++ addKnob += knob; ++ addKnob += "-small.png'}}\n" ++ " stock['smallknobr'] = {{'"; ++ addKnob += knob; ++ addKnob += "-middle.png'}}\n" ++ " stock['button_on'] = {{'" ++ "echo-switch_on.png'}}\n" ++ " stock['button_off'] = {{'" ++ "echo-switch_off.png'}}\n" ++ " }\n" ++ "widget '*."; ++ addKnob += plug_name; ++ addKnob += "' style 'gx_"; ++ addKnob += plug_name; ++ addKnob += "_dark_skin_icons' \n" ++ "class '*GxToggleImage' style'gx_"; ++ addKnob += plug_name; ++ addKnob += "_dark_skin_icons' \n"; ++} ++ ++void Gx_colwah_GUI::set_skin() ++{ ++ Glib::ustring toparse = "pixmap_path "; ++ toparse += " '"; ++ toparse += GX_LV2_STYLE_DIR; ++ toparse += "/'\n"; ++ toparse += "style \"gx_"; ++ toparse += plug_name; ++ toparse += "_dark-paintbox\"\n" ++ " { \n" ++ " GxPaintBox::icon-set =9\n" ++ " stock['gxhead'] = {{'"; ++ toparse += plugskin; ++ toparse += "'}}\n" ++ " }\n" ++ "\n" ++ "style 'gx_head_black_box' \n" ++ " { \n" ++ " font_name = 'sans bold 7.5'\n" ++ " fg[NORMAL] = '#ff9000' \n" ++ " }\n"; ++ toparse += addKnob; ++ ++ toparse += " widget '*.amplabel' style:highest 'gx_head_black_box'\n" ++ "widget '*."; ++ toparse += plug_name; ++ toparse += "' style 'gx_"; ++ toparse += plug_name; ++ toparse += "_dark-paintbox' "; ++ ++ toparse += "style 'guitarix_default' {\n" ++ ++ " GxPaintBox::bevel = 0.11\n" ++ " GxPaintBox::inverse = 0\n" ++ " GxPaintBox::alternate-box = { 0, 0, 30, 15 }\n" ++ ++ " fg[NORMAL] = '#ff9000'\n" ++ " fg[ACTIVE] = { 1.0, 1.0, 1.0 }\n" ++ " fg[PRELIGHT] = { 1.0, 1.0, 1.0 }\n" ++ " fg[INSENSITIVE] = { 0.5, 0.5, 0.5 }\n" ++ " fg[SELECTED] = { 0.9, 0.9, 0.9 }\n" ++ ++ " bg[NORMAL] = { 0.13, 0.13, 0.13 }\n" ++ " bg[ACTIVE] = { 0.0, 0.0, 0.0 }\n" ++ " bg[PRELIGHT] = { 0.25, 0.25, 0.25 }\n" ++ " bg[INSENSITIVE] = { 0.2, 0.2, 0.2 }\n" ++ " bg[SELECTED] = { 0.25, 0.25, 0.25 }\n" ++ ++ " text[NORMAL] = { 0.9, 0.9, 0.9 }\n" ++ " text[ACTIVE] = '#ff9000'\n" ++ " text[PRELIGHT] = { 1.0, 1.0, 1.0 }\n" ++ " text[INSENSITIVE] = { 0.5, 0.5, 0.5 }\n" ++ " text[SELECTED] = { 1.0, 1.0, 1.0 }\n" ++ ++ " base[NORMAL] = { 0.0, 0.0, 0.0 }\n" ++ " base[ACTIVE] = { 0.18, 0.18, 0.18 }\n" ++ " base[PRELIGHT] = { 0.1, 0.1, 0.1 }\n" ++ " base[INSENSITIVE] = { 0.2, 0.2, 0.2 }\n" ++ " base[SELECTED] = { 0.8, 0.18, 0.18 }\n" ++ "}\n" ++ "widget '*."; ++ toparse += plug_name; ++ toparse += "' style:highest 'guitarix_default'\n"; ++ toparse += " style 'gx_selector'\n" ++ " {\n" ++ " fg[NORMAL] = '#ff9000' \n" ++ " fg[PRELIGHT] = '#ffffff' \n" ++ " bg[NORMAL] = '#2f2f2f' \n" ++ " bg[PRELIGHT] = '#2f2f2f' \n" ++ " base[NORMAL] = { 0.05, 0.05, 0.05 } \n" ++ " base[PRELIGHT] = '#000000' \n" ++ " text[NORMAL] = '#ff9000' \n" ++ " text[PRELIGHT] = '#ffffff' \n" ++ " GxRegler::value-border = { 4, 4, 2, 2 } \n" ++ " GxRegler::border-radius = 6\n" ++ " GxRegler::bevel = 0.12\n" ++ " GtkRange::trough-border = 2\n" ++ " GtkRange::stepper-size = 8\n" ++ " GtkRange::stepper-spacing = 2\n" ++ " GxRegler::value-border = { 2, 0, 0, 0 }\n" ++ " font_name = 'sans bold 7.5'\n" ++ " xthickness = 8\n" ++ " ythickness = 4\n" ++ " }\n" ++ "class '*GxSelector' style:highest 'gx_selector'\n"; ++ toparse += " style 'guitarix_knobs' {\n" ++ " fg[INSENSITIVE] = '#211006'\n" ++ "}\n" ++ "class 'GxKnob' style:highest 'guitarix_knobs'\n" ++ ++ "style 'guitarix_small_knob' {\n" ++ " GxKnob::x_center = -1\n" ++ " GxKnob::y_center = -1\n" ++ " GxKnob::ring_radius = 15\n" ++ " GxKnob::ring_width = 2\n" ++ " GxKnob::ring_led_size = 3\n" ++ " GxKnob::ring_led_distance = 2\n" ++ " GxKnob::indicator_radius = 11\n" ++ " GxKnob::indicator_width = 2\n" ++ " GxKnob::indicator_length = 5\n" ++ "}\n" ++ "widget_class '*GxSmallKnob' style:highest 'guitarix_small_knob'\n" ++ ++ "style 'guitarix_small_knob_r' {\n" ++ " GxKnob::x_center = -1\n" ++ " GxKnob::y_center = -1\n" ++ " GxKnob::ring_radius = 26\n" ++ " GxKnob::ring_width = 3\n" ++ " GxKnob::ring_led_size = 3\n" ++ " GxKnob::ring_led_distance = 2\n" ++ " GxKnob::indicator_radius = 12\n" ++ " GxKnob::indicator_width = 3\n" ++ " GxKnob::indicator_length = 3\n" ++ "}\n" ++ "widget_class '*GxSmallKnobR' style:highest 'guitarix_small_knob_r'\n" ++ ++ "style 'guitarix_mid_knob' {\n" ++ " GxKnob::x_center = -1\n" ++ " GxKnob::y_center = -1\n" ++ " GxKnob::ring_radius = 35\n" ++ " GxKnob::ring_width = 6\n" ++ " GxKnob::ring_led_size = 2\n" ++ " GxKnob::ring_led_distance = 2\n" ++ " GxKnob::indicator_radius = 27\n" ++ " GxKnob::indicator_width = 2\n" ++ " GxKnob::indicator_length = 6\n" ++ "}\n" ++ "widget_class '*GxMidKnob' style:highest 'guitarix_mid_knob'\n" ++ ++ "style 'guitarix_big_knob' {\n" ++ " GxKnob::x_center = -1\n" ++ " GxKnob::y_center = -1\n" ++ " GxKnob::ring_radius = 50.5\n" ++ " GxKnob::ring_width = 3\n" ++ " GxKnob::ring_led_size = 0\n" ++ " GxKnob::ring_led_distance = 0\n" ++ " GxKnob::indicator_radius = 46\n" ++ " GxKnob::indicator_width = 3\n" ++ " GxKnob::indicator_length = 6\n" ++ "}\n" ++ "widget_class '*GxBigKnob' style:highest 'guitarix_big_knob'\n" ++ " \n"; ++ ++ gtk_rc_parse_string (toparse.c_str()); ++} ++ ++void Gx_colwah_GUI::set_plug_name( const char * plugin_uri) ++{ ++ addKnob = ""; ++ ++ if (strcmp("http://guitarix.sourceforge.net/plugins/gx_colwah_gui#_colwah_", plugin_uri) == 0) ++ { ++ plug_name = "Wahwah"; ++ //set_knob("nk-knob"); ++ } ++ else ++ { ++ plug_name = "Wahwah"; ++ } ++} ++ ++GtkWidget* Gx_colwah_GUI::make_gui() ++{ ++ // init the gxwmm library ++ Gxw::init(); ++ set_skin(); ++ GtkWidget* container = gtk_vbox_new(FALSE, 2); ++ widget = new Widget(plug_name); ++ GtkWidget* cWidget = GTK_WIDGET(widget->gobj()); ++ gtk_container_add(GTK_CONTAINER(container), cWidget ); ++ ++ return container; ++} ++ ++ ++static LV2UI_Handle instantiate(const struct _LV2UI_Descriptor * descriptor, ++ const char * plugin_uri, ++ const char * bundle_path, ++ LV2UI_Write_Function write_function, ++ LV2UI_Controller controller, ++ LV2UI_Widget * widget, ++ const LV2_Feature * const * features) ++{ ++ Gx_colwah_GUI* self = new Gx_colwah_GUI(); ++ if (self == NULL) return NULL; ++ self->set_plug_name_static(self, plugin_uri); ++ *widget = (LV2UI_Widget)self->make_gui_static(self); ++ self->widget->controller = controller; ++ self->widget->write_function = write_function; ++ return (LV2UI_Handle)self; ++} ++ ++static void cleanup(LV2UI_Handle ui) ++{ ++ Gx_colwah_GUI *pluginGui = static_cast<Gx_colwah_GUI*>(ui); ++ delete pluginGui->widget; ++ delete pluginGui; ++} ++ ++static void port_event(LV2UI_Handle ui, ++ uint32_t port_index, ++ uint32_t buffer_size, ++ uint32_t format, ++ const void * buffer) ++{ ++ Gx_colwah_GUI *self = static_cast<Gx_colwah_GUI*>(ui); ++ self->widget->set_value_static( port_index, buffer_size, format, buffer, self->widget); ++ return; ++} ++ ++static LV2UI_Descriptor descriptors[] = ++{ ++ {GXPLUGIN_UI_URI"#_colwah_", instantiate, cleanup, port_event, NULL} ++}; ++ ++const LV2UI_Descriptor * lv2ui_descriptor(uint32_t index) ++{ ++ //printf("lv2ui_descriptor(%u) called\n", (uint32_t)index); ++ if (index >= sizeof(descriptors) / sizeof(descriptors[0])) ++ { ++ return NULL; ++ } ++ return descriptors + index; ++} ++ +diff --git a/trunk/src/LV2/gx_colwah.lv2/manifest.ttl.in b/trunk/src/LV2/gx_colwah.lv2/manifest.ttl.in +new file mode 100644 +index 00000000..d67c6974 +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/manifest.ttl.in +@@ -0,0 +1,26 @@ ++# ++# Copyright (C) 2012 Hermann Meyer, Andreas Degert, Pete Shorthose, Steve Poskitt ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++# -------------------------------------------------------------------------- ++# ++ ++@prefix lv2: <http://lv2plug.in/ns/lv2core#> . ++@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . ++ ++<http://guitarix.sourceforge.net/plugins/gx_colwah_#_colwah_> ++ a lv2:Plugin ; ++ lv2:binary <gx_colwah@LIB_EXT@> ; ++ rdfs:seeAlso <gx_colwah.ttl> , <modgui.ttl>. +diff --git a/trunk/src/LV2/gx_colwah.lv2/modgui.ttl b/trunk/src/LV2/gx_colwah.lv2/modgui.ttl +new file mode 100644 +index 00000000..4e30c382 +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/modgui.ttl +@@ -0,0 +1,2 @@ ++@prefix modgui: <http://moddevices.com/ns/modgui#> . ++@prefix lv2: <http://lv2plug.in/ns/lv2core#> . +diff --git a/trunk/src/LV2/gx_colwah.lv2/wah.h b/trunk/src/LV2/gx_colwah.lv2/wah.h +new file mode 100644 +index 00000000..01bd2fcb +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/wah.h +@@ -0,0 +1,26 @@ ++/* ++ * Copyright (C) 2014 Guitarix project MOD project ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * -------------------------------------------------------------------------- ++ */ ++ ++#include "colwah.cc" ++#include "dallaswah.cc" ++#include "foxwah.cc" ++#include "jenwah.cc" ++#include "maestrowah.cc" ++#include "selwah.cc" ++#include "voxwah.cc" +diff --git a/trunk/src/LV2/gx_colwah.lv2/widget.cpp b/trunk/src/LV2/gx_colwah.lv2/widget.cpp +new file mode 100644 +index 00000000..8575d25f +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/widget.cpp +@@ -0,0 +1,268 @@ ++/* ++ * Copyright (C) 2012 Hermann Meyer, Andreas Degert, Pete Shorthose, Steve Poskitt ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * -------------------------------------------------------------------------- ++ */ ++ ++ ++#include "widget.h" ++ ++#include <iostream> ++ ++ ++/* @get controller by port ++ * this function is used by make_selector() make_controller_box() ++ * set_value() and on_value_changed() ++ * so controller widgets needs only here asined to a port, ++ * and all functions which need acess to the controller widget pointer ++ * can receive them by port number ++ */ ++ ++Gtk::Widget* Widget::get_controller_by_port(uint32_t port_index) ++{ ++ switch ((PortIndex)port_index ) ++ { ++ case WAH: ++ return &m_bigknob[0]; ++ case FREQ: ++ return &m_bigknob[1]; ++ case MODE: ++ return &m_selector[0]; ++ case MODEL: ++ return &m_selector[1]; ++ case WET_DRY: ++ return &m_bigknob[2]; ++ ++ default: ++ return NULL; ++ } ++} ++ ++Widget::Widget(Glib::ustring plugname): ++plug_name(plugname), ++logo(plugname) ++{ ++ Glib::ustring enumMODEL[] = {"Colorsound Wah","Dallas Wah","Foxx Wah","Jen Wah","Maestro Wah","Selmer Wah","Vox Wah V847"}; ++ static const size_t enumMODEL_size = sizeof(enumMODEL) / sizeof(enumMODEL[0]); ++ make_selector_box(&m_vboxs[0],"MODEL", enumMODEL, enumMODEL_size, 0,1.0, MODEL); ++ ++ Glib::ustring enumMODE[] = {"manual","auto","alien"}; ++ static const size_t enumMODE_size = sizeof(enumMODE) / sizeof(enumMODE[0]); ++ make_selector_box(&m_vboxs[1],"MODE", enumMODE, enumMODE_size, 0,1.0, MODE); ++ ++ // create controllers for port name ++ make_controller_box(&m_vboxc[0], "WAH", 0.0, 1.0, 0.01, WAH); ++ make_controller_box(&m_vboxc[1], "ALIEN FREQ", 24.0, 3.6e+02, 1.0, FREQ); ++ make_controller_box(&m_vboxc[2], "WET_DRY", 0.0, 1e+02, 1.0, WET_DRY); ++ ++ // set propertys for the main paintbox holding the skin ++ m_paintbox.set_border_width(10); ++ m_paintbox.set_spacing(6); ++ m_paintbox.set_homogeneous(false); ++ m_paintbox.set_name(plug_name); ++ m_paintbox.property_paint_func() = "rack_unit_expose"; ++ add(m_paintbox); ++ // box for the controllers ++ m_hbox_.set_spacing(25); ++ m_hbox_.set_border_width(24); ++ m_hbox_.set_homogeneous(false); ++ // set a vertical box in the paintbox ++ m_vbox.set_border_width(14); ++ m_vbox1.set_border_width(14); ++ m_paintbox.pack_start(m_vbox_); ++ ++ // modify logo layout ++ Pango::FontDescription font_desc = logo.get_style()->get_font(); ++ font_desc.set_size(int(14*Pango::SCALE)); ++ font_desc.set_weight(Pango::WEIGHT_BOLD); ++ logo.modify_font(font_desc); ++ ++ // and controller box on top ++ //m_hbox1_.set_border_width(24); ++ m_hbox1_.set_spacing(64); ++ logo.set_name("amplabel"); ++ m_vbox_.pack_start(m_hbox1_, Gtk::PACK_SHRINK); ++ m_hbox1_.pack_start(m_vbox1_, Gtk::PACK_EXPAND_PADDING); ++ m_hbox1_.pack_end(m_vbox2_, Gtk::PACK_SHRINK); ++ m_hbox1_.pack_end(logo, Gtk::PACK_SHRINK); ++ m_vbox_.pack_start(m_hbox_, Gtk::PACK_SHRINK); ++ m_vbox_.set_homogeneous(false); ++ // put boxed controllers into controller box ++ m_hbox_.pack_start(m_vbox1, Gtk::PACK_EXPAND_PADDING); ++ for (int i = 0; i<2;i++) { ++ m_vboxs_.pack_start(m_vboxs[i]); ++ } ++ m_vboxs_.set_spacing(5); ++ m_hbox_.pack_start(m_vboxs_, Gtk::PACK_EXPAND_PADDING); ++ for (int i = 0; i<3;i++) { ++ m_hbox_.pack_start(m_vboxc[i]); ++ } ++ m_hbox_.pack_start(m_vbox, Gtk::PACK_EXPAND_PADDING); ++ ++ // connect expose handler as resize handler ++ m_paintbox.signal_expose_event().connect( ++ sigc::mem_fun(this, &Widget::_expose_event), true); ++ ++ set_app_paintable(true); ++ show_all(); ++} ++ ++Widget::~Widget() ++{ ++ ++} ++ ++// set borderwith for paintbox when widget resize ++// to hold controllers in place ++bool Widget::_expose_event(GdkEventExpose *event) ++{ ++ int x, y, width, height, depth; ++ m_paintbox.get_window()->get_geometry(x, y, width, height, depth); ++ //double_t height = m_paintbox.get_window()->get_height(); ++ m_paintbox.set_border_width(height/10); ++ return false; ++} ++ ++// create selectors from gxwmm ++void Widget::make_selector_box(Gtk::Box *box, ++ Glib::ustring labela, ++ Glib::ustring tables[], ++ size_t _size, ++ float min, float digits, ++ PortIndex port_name) ++{ ++ Gxw::Selector *regler = static_cast<Gxw::Selector*> ++ (get_controller_by_port(port_name)); ++ if (regler) ++ { ++ float max = static_cast<float>(_size+1); ++ ++ Gtk::TreeModelColumn<Glib::ustring> label; ++ Gtk::TreeModelColumnRecord rec; ++ rec.add(label); ++ Glib::RefPtr<Gtk::ListStore> ls = Gtk::ListStore::create(rec); ++ ++ for (uint32_t i = 0 ; i< _size; ++i) { ++ ls->append()->set_value(0, tables[i]); ++ } ++ regler->set_model(ls); ++ regler->set_has_tooltip(); ++ regler->set_tooltip_text(labela); ++ regler->cp_configure("SELECTOR", labela, min, max, digits); ++ regler->set_show_value(false); ++ regler->set_name(plug_name); ++ regler->signal_value_changed().connect(sigc::bind(sigc::mem_fun( ++ *this, &Widget::on_value_changed), port_name)); ++ box->pack_start(*regler,Gtk::PACK_SHRINK); ++ } ++} ++ ++// create stackboxes with controllers for port name ++void Widget::make_controller_box(Gtk::Box *box, ++ Glib::ustring label, ++ float min, float max, ++ float digits, ++ PortIndex port_name) ++{ ++ Gxw::Regler *regler = static_cast<Gxw::Regler*>( ++ get_controller_by_port(port_name)); ++ if (regler) ++ { ++ Gtk::Label* pr = new Gtk::Label(label, 0); ++ pr->set_name("amplabel"); ++ // use label images instead simple string labes ++ //Glib::ustring label_image = GX_LV2_STYLE_DIR; ++ //label_image += "/"; ++ //label_image += label; ++ //label_image += ".png"; ++ //Gtk::Image *pr = new Gtk::Image(label_image); ++ ++ Gtk::VBox* b1 = new Gtk::VBox(); ++ box->pack_start( *Gtk::manage(b1), Gtk::PACK_EXPAND_PADDING); ++ box->pack_start( *Gtk::manage(pr),Gtk::PACK_SHRINK); ++ regler->cp_configure("KNOB", label, min, max, digits); ++ regler->set_show_value(true); ++ regler->set_name(plug_name); ++ box->pack_start(*regler,Gtk::PACK_SHRINK); ++ Gtk::VBox* b2 = new Gtk::VBox(); ++ box->pack_start( *Gtk::manage(b2), Gtk::PACK_EXPAND_PADDING); ++ regler->signal_value_changed().connect(sigc::bind(sigc::mem_fun( ++ *this, &Widget::on_value_changed), port_name)); ++ } ++} ++ ++// create stackboxes with switch controller for port name ++void Widget::make_switch_box(Gtk::Box *box, ++ Glib::ustring label, ++ PortIndex port_name) ++{ ++ Gxw::Switch *regler = static_cast<Gxw::Switch*>( ++ get_controller_by_port(port_name)); ++ if (regler) ++ { ++ Gtk::Label* pr = new Gtk::Label(label, 0); ++ pr->set_name("amplabel"); ++ // use label images instead simple string labes ++ /*Glib::ustring label_image = GX_LV2_STYLE_DIR; ++ label_image += "/"+plug_name+"-"; ++ label_image += label; ++ label_image += "-label.png"; ++ Gtk::Image *pr = new Gtk::Image(label_image);*/ ++ ++ regler->cp_configure("switch", label, 0, 1, 1); ++ regler->set_name(plug_name); ++ regler->set_base_name( "button" ); ++ Gtk::VBox* b1 = new Gtk::VBox(); ++ box->pack_start( *Gtk::manage(b1), Gtk::PACK_EXPAND_PADDING); ++ box->pack_start( *Gtk::manage(pr),Gtk::PACK_SHRINK); ++ box->pack_start(*regler,Gtk::PACK_SHRINK); ++ Gtk::VBox* b2 = new Gtk::VBox(); ++ box->pack_start( *Gtk::manage(b2), Gtk::PACK_EXPAND_PADDING); ++ regler->signal_toggled().connect(sigc::bind(sigc::mem_fun( ++ *this, &Widget::on_value_changed), port_name)); ++ } ++} ++ ++// receive controller value changes from host and set them to controller ++void Widget::set_value(uint32_t port_index, ++ uint32_t format, ++ const void * buffer) ++{ ++ if ( format == 0 ) ++ { ++ Gxw::Regler *regler = static_cast<Gxw::Regler*>( ++ get_controller_by_port(port_index)); ++ if (regler) ++ { ++ float value = *static_cast<const float*>(buffer); ++ regler->cp_set_value(value); ++ } ++ } ++} ++ ++// write (UI) controller value changes to the host->engine ++void Widget::on_value_changed(uint32_t port_index) ++{ ++ Gxw::Regler *regler = static_cast<Gxw::Regler*>( ++ get_controller_by_port(port_index)); ++ if (regler) ++ { ++ float value = regler->cp_get_value(); ++ write_function(controller, port_index, sizeof(float), 0, ++ static_cast<const void*>(&value)); ++ } ++} ++ +diff --git a/trunk/src/LV2/gx_colwah.lv2/widget.h b/trunk/src/LV2/gx_colwah.lv2/widget.h +new file mode 100644 +index 00000000..7ec76d20 +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/widget.h +@@ -0,0 +1,96 @@ ++/* ++ * Copyright (C) 2012 Hermann Meyer, Andreas Degert, Pete Shorthose, Steve Poskitt ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * -------------------------------------------------------------------------- ++ */ ++ ++#pragma once ++ ++#ifndef SRC_HEADERS_WIDGET_H_ ++#define SRC_HEADERS_WIDGET_H_ ++ ++#include <gtkmm.h> ++#include <gxwmm.h> ++#include "gx_colwah.h" ++#include "../config.h" // for GX_STYLE_DIR ++// LV2UI stuff ++#include "lv2/lv2plug.in/ns/extensions/ui/ui.h" ++ ++class Widget : public Gtk::HBox ++{ ++private: ++ Gtk::Widget* get_controller_by_port(uint32_t port_index); ++ ++ void on_value_changed(uint32_t port_index); ++ ++ void make_controller_box(Gtk::Box *box, ++ Glib::ustring label, ++ float min, float max, ++ float digits, ++ PortIndex port_name); ++ ++ void make_selector_box(Gtk::Box *box, ++ Glib::ustring label, ++ Glib::ustring tables[], ++ size_t _size, ++ float min, float digits, ++ PortIndex port_name); ++ ++ void make_switch_box(Gtk::Box *box, ++ Glib::ustring label, ++ PortIndex port_name); ++ ++ bool _expose_event(GdkEventExpose *event); ++ ++ void set_value(uint32_t port_index, ++ uint32_t format, ++ const void * buffer); ++public: ++ ++ // public Lv2 communication stuff ++ LV2UI_Controller controller; ++ LV2UI_Write_Function write_function; ++ static void set_value_static(uint32_t port_index, ++ uint32_t buffer_size, ++ uint32_t format, ++ const void * buffer, Widget *self) ++ { ++ self->set_value(port_index,format,buffer); ++ } ++ ++ Widget(Glib::ustring plugname); ++ ~Widget(); ++ ++protected: ++ Glib::ustring plug_name; ++ Gtk::Label logo; ++ Gtk::VBox m_vbox_; ++ Gtk::VBox m_vbox1_; ++ Gtk::VBox m_vbox2_; ++ Gtk::VBox m_vbox; ++ Gtk::VBox m_vbox1; ++ Gtk::VBox m_vboxc[3]; ++ Gtk::VBox m_vboxs[2]; ++ Gtk::VBox m_vboxs_; ++ Gtk::HBox m_hbox_; ++ Gtk::HBox m_hbox1_; ++ ++ Gxw::PaintBox m_paintbox; ++ Gxw::Selector m_selector[2]; ++ Gxw::SmallKnobR m_bigknob[3]; ++}; ++ ++#endif //SRC_HEADERS_WIDGET_H_ +diff --git a/trunk/src/LV2/gx_colwah.lv2/wscript b/trunk/src/LV2/gx_colwah.lv2/wscript +new file mode 100644 +index 00000000..fa66b426 +--- /dev/null ++++ b/trunk/src/LV2/gx_colwah.lv2/wscript +@@ -0,0 +1,62 @@ ++#!/usr/bin/env python ++# encoding: utf-8 ++ ++import sys ++ ++def configure(conf): ++ pass ++ ++def build(bld): ++ bundle = 'gx_colwah.lv2' ++ ++ src = ['gx_colwah.cpp' ++ ] ++ incl = ['../faust','./', '../DSP'] ++ lib = [] ++ if sys.platform.startswith("linux"): ++ lib.append('dl') ++ uselib = ['LV2CORE'] ++ cxxflag =[] ++ if not bld.env['OPT'] and bld.env['SSE2']: ++ cxxflag = [ "-msse2", "-mfpmath=sse"] ++ lv2_effects = bld.shlib( ++ includes = incl, ++ lib = lib, ++ uselib = uselib, ++ obj_ext = '_14.o', ++ cxxflags = cxxflag, ++ defines = ["LV2_SO"], ++ target = 'gx_colwah', ++ source = src, ++ install_path = '${LV2DIR}/%s' % bundle, ++ chmod = 0o755, ++ ) ++ lv2_effects.env['cxxshlib_PATTERN'] = '%s.so' ++ ++ if bld.env['LV2GUI']: ++ libpath1 = [] ++ lib1 = [] ++ incl = [] ++ if sys.platform.startswith("linux"): ++ lib1.append('dl') ++ ++ lv2_plugin_gui = bld.shlib( ++ includes = incl, ++ lib = lib1, ++ libpath = libpath1, ++ use = ['gxwmm','LV2CORE','GTKMM'], ++ linkflags = '-Wl,-z,nodelete', ++ defines = ["LV2_GUI"], ++ target = 'gx_colwah_gui', ++ source = 'widget.cpp gx_colwah_gui.cpp', ++ install_path = '${LV2DIR}/%s' % bundle, ++ chmod = 0o755, ++ ) ++ lv2_plugin_gui.env['cxxshlib_PATTERN'] = '%s.so' ++ ++ install_path = '${LV2DIR}/%s' % bundle, ++ if bld.env['MODGUI']: ++ bld.install_files('${LV2DIR}/gx_colwah.lv2', bld.path.ant_glob('*.ttl'), relative_trick=True) ++ bld.install_files('${LV2DIR}/gx_colwah.lv2', bld.path.ant_glob('modgui/**/*'), relative_trick=True) ++ else: ++ bld.install_files('${LV2DIR}/gx_colwah.lv2', bld.path.ant_glob('*.ttl', excl=['modgui.ttl']), relative_trick=True) +-- +2.25.1 + + +From cd979978eac96372b5a4e5bf228a5c0b0b933ff9 Mon Sep 17 00:00:00 2001 +From: brummer10 <brumm...@web.de> +Date: Mon, 20 Jan 2020 07:34:31 +0100 +Subject: [PATCH 3/8] fix rename gx_wah.lv2 to gy_colwah.lv2 + +--- + trunk/src/LV2/wscript | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/trunk/src/LV2/wscript b/trunk/src/LV2/wscript +index 4bcaa063..5a0d96c7 100644 +--- a/trunk/src/LV2/wscript ++++ b/trunk/src/LV2/wscript +@@ -88,7 +88,7 @@ subdirs = [ + 'gx_mole.lv2', + 'gx_rangem.lv2', + 'gx_hogsfoot.lv2', +- 'gx_wah.lv2', ++ 'gx_colwah.lv2', + 'gx_gcb_95.lv2', + 'gx_aclipper.lv2', + 'gx_bmp.lv2', +-- +2.25.1 + + +From d9b0f5dedb05914867954611f88a8e81699da0e5 Mon Sep 17 00:00:00 2001 +From: brummer10 <brumm...@web.de> +Date: Mon, 20 Jan 2020 07:35:19 +0100 +Subject: [PATCH 4/8] remove gx_wah.lv2 + +--- + trunk/src/LV2/gx_wah.lv2/gx_colwah.cpp | 254 ----------------- + trunk/src/LV2/gx_wah.lv2/gx_colwah.h | 42 --- + trunk/src/LV2/gx_wah.lv2/gx_colwah.ttl | 141 --------- + trunk/src/LV2/gx_wah.lv2/gx_colwah_gui.cpp | 314 --------------------- + trunk/src/LV2/gx_wah.lv2/manifest.ttl.in | 26 -- + trunk/src/LV2/gx_wah.lv2/modgui.ttl | 2 - + trunk/src/LV2/gx_wah.lv2/wah.h | 26 -- + trunk/src/LV2/gx_wah.lv2/widget.cpp | 268 ------------------ + trunk/src/LV2/gx_wah.lv2/widget.h | 96 ------- + trunk/src/LV2/gx_wah.lv2/wscript | 62 ---- + 10 files changed, 1231 deletions(-) + delete mode 100644 trunk/src/LV2/gx_wah.lv2/gx_colwah.cpp + delete mode 100644 trunk/src/LV2/gx_wah.lv2/gx_colwah.h + delete mode 100644 trunk/src/LV2/gx_wah.lv2/gx_colwah.ttl + delete mode 100644 trunk/src/LV2/gx_wah.lv2/gx_colwah_gui.cpp + delete mode 100644 trunk/src/LV2/gx_wah.lv2/manifest.ttl.in + delete mode 100644 trunk/src/LV2/gx_wah.lv2/modgui.ttl + delete mode 100644 trunk/src/LV2/gx_wah.lv2/wah.h + delete mode 100644 trunk/src/LV2/gx_wah.lv2/widget.cpp + delete mode 100644 trunk/src/LV2/gx_wah.lv2/widget.h + delete mode 100644 trunk/src/LV2/gx_wah.lv2/wscript + +diff --git a/trunk/src/LV2/gx_wah.lv2/gx_colwah.cpp b/trunk/src/LV2/gx_wah.lv2/gx_colwah.cpp +deleted file mode 100644 +index 331cf3fb..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/gx_colwah.cpp ++++ /dev/null +@@ -1,254 +0,0 @@ +-/* +- * Copyright (C) 2014 Guitarix project MOD project +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- * -------------------------------------------------------------------------- +- */ +- +- +-////////////////////////////// LOCAL INCLUDES ////////////////////////// +- +-#include "gx_common.h" // faust support and denormal protection (SSE) +-#include "gx_colwah.h" // define struct PortIndex +-#include "gx_pluginlv2.h" // define struct PluginLV2 +-#include "wah.h" // dsp class generated by faust -> dsp2cc +- +-////////////////////////////// PLUG-IN CLASS /////////////////////////// +- +-#define declare(n) namespace n { PluginLV2 *plugin(); } +- +-declare(colwah); +-declare(dallaswah); +-declare(foxwah); +-declare(jenwah); +-declare(maestrowah); +-declare(selwah); +-declare(voxwah); +- +-static plug wah_model [] = { +- colwah::plugin, //0 +- dallaswah::plugin, //1 +- foxwah::plugin, //2 +- jenwah::plugin, //3 +- maestrowah::plugin, //4 +- selwah::plugin, //5 +- voxwah::plugin, //6 +-}; +- +-static const size_t WAH_COUNT = sizeof(wah_model) / sizeof(wah_model[0]); +- +- +-namespace colwah { +- +-class Gx_colwah_ +-{ +-private: +- // pointer to buffer +- float* output; +- float* input; +- // pointer to dsp class +- PluginLV2* wah[WAH_COUNT]; +- float* wahh_model; +- uint32_t wah_model_; +- uint32_t wah_max; +- // private functions +- inline void run_dsp_(uint32_t n_samples); +- inline void connect_(uint32_t port,void* data); +- inline void init_dsp_(uint32_t rate); +- inline void connect_all__ports(uint32_t port, void* data); +- inline void activate_f(); +- inline void clean_up(); +- inline void deactivate_f(); +- +-public: +- // LV2 Descriptor +- static const LV2_Descriptor descriptor; +- // static wrapper to private functions +- static void deactivate(LV2_Handle instance); +- static void cleanup(LV2_Handle instance); +- static void run(LV2_Handle instance, uint32_t n_samples); +- static void activate(LV2_Handle instance); +- static void connect_port(LV2_Handle instance, uint32_t port, void* data); +- static LV2_Handle instantiate(const LV2_Descriptor* descriptor, +- double rate, const char* bundle_path, +- const LV2_Feature* const* features); +- Gx_colwah_(); +- ~Gx_colwah_(); +-}; +- +-// constructor +-Gx_colwah_::Gx_colwah_() : +- output(NULL), +- input(NULL), +- wahh_model(NULL), +- wah_model_(0) {}; +- +-// destructor +-Gx_colwah_::~Gx_colwah_() +-{ +- for(uint32_t i=0; i<WAH_COUNT; i++) { +- wah[i]->delete_instance(wah[i]); +- } +- +-}; +- +-///////////////////////// PRIVATE CLASS FUNCTIONS ///////////////////// +- +-void Gx_colwah_::init_dsp_(uint32_t rate) +-{ +- AVOIDDENORMALS(); // init the SSE denormal protection +- +- for(uint32_t i=0; i<WAH_COUNT; i++) { +- wah[i] = wah_model[i](); +- wah[i]->set_samplerate(rate, wah[i]); +- } +- wah_max = WAH_COUNT-1; +-} +- +-// connect the Ports used by the plug-in class +-void Gx_colwah_::connect_(uint32_t port,void* data) +-{ +- switch ((PortIndex)port) +- { +- case EFFECTS_OUTPUT: +- output = static_cast<float*>(data); +- break; +- case EFFECTS_INPUT: +- input = static_cast<float*>(data); +- break; +- case MODEL: +- wahh_model = static_cast<float*>(data); +- break; +- default: +- break; +- } +-} +- +-void Gx_colwah_::activate_f() +-{ +- // allocate the internal DSP mem +-} +- +-void Gx_colwah_::clean_up() +-{ +- // delete the internal DSP mem +-} +- +-void Gx_colwah_::deactivate_f() +-{ +- // delete the internal DSP mem +-} +- +-void Gx_colwah_::run_dsp_(uint32_t n_samples) +-{ +- if (n_samples< 1) return; +- wah_model_ = min(wah_max, static_cast<uint32_t>(*(wahh_model))); +- wah[wah_model_]->mono_audio(static_cast<int>(n_samples), input, output, wah[wah_model_]); +-} +- +-void Gx_colwah_::connect_all__ports(uint32_t port, void* data) +-{ +- // connect the Ports used by the plug-in class +- connect_(port,data); +- // connect the Ports used by the DSP class +- for(uint32_t i=0; i<WAH_COUNT; i++) { +- wah[i]->connect_ports(port, data, wah[i]); +- } +-} +- +-////////////////////// STATIC CLASS FUNCTIONS //////////////////////// +- +-LV2_Handle +-Gx_colwah_::instantiate(const LV2_Descriptor* descriptor, +- double rate, const char* bundle_path, +- const LV2_Feature* const* features) +-{ +- // init the plug-in class +- Gx_colwah_ *self = new Gx_colwah_(); +- if (!self) +- { +- return NULL; +- } +- +- self->init_dsp_((uint32_t)rate); +- +- return (LV2_Handle)self; +-} +- +-void Gx_colwah_::connect_port(LV2_Handle instance, +- uint32_t port, void* data) +-{ +- // connect all ports +- static_cast<Gx_colwah_*>(instance)->connect_all__ports(port, data); +-} +- +-void Gx_colwah_::activate(LV2_Handle instance) +-{ +- // allocate needed mem +- static_cast<Gx_colwah_*>(instance)->activate_f(); +-} +- +-void Gx_colwah_::run(LV2_Handle instance, uint32_t n_samples) +-{ +- // run dsp +- static_cast<Gx_colwah_*>(instance)->run_dsp_(n_samples); +-} +- +-void Gx_colwah_::deactivate(LV2_Handle instance) +-{ +- // free allocated mem +- static_cast<Gx_colwah_*>(instance)->deactivate_f(); +-} +- +-void Gx_colwah_::cleanup(LV2_Handle instance) +-{ +- // well, clean up after us +- Gx_colwah_* self = static_cast<Gx_colwah_*>(instance); +- self->clean_up(); +- delete self; +-} +- +-const LV2_Descriptor Gx_colwah_::descriptor = +-{ +- GXPLUGIN_URI "#_colwah_", +- Gx_colwah_::instantiate, +- Gx_colwah_::connect_port, +- Gx_colwah_::activate, +- Gx_colwah_::run, +- Gx_colwah_::deactivate, +- Gx_colwah_::cleanup, +- NULL +-}; +- +- +-} // end namespace colwah +- +-////////////////////////// LV2 SYMBOL EXPORT /////////////////////////// +- +-extern "C" +-LV2_SYMBOL_EXPORT +-const LV2_Descriptor* +-lv2_descriptor(uint32_t index) +-{ +- switch (index) +- { +- case 0: +- return &colwah::Gx_colwah_::descriptor; +- default: +- return NULL; +- } +-} +- +-///////////////////////////// FIN ////////////////////////////////////// +diff --git a/trunk/src/LV2/gx_wah.lv2/gx_colwah.h b/trunk/src/LV2/gx_wah.lv2/gx_colwah.h +deleted file mode 100644 +index 9b23a29a..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/gx_colwah.h ++++ /dev/null +@@ -1,42 +0,0 @@ +-/* +- * Copyright (C) 2014 Guitarix project MOD project +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- * -------------------------------------------------------------------------- +- */ +- +-#pragma once +- +-#ifndef SRC_HEADERS_GXEFFECTS_H_ +-#define SRC_HEADERS_GXEFFECTS_H_ +- +-#include <lv2.h> +- +-#define GXPLUGIN_URI "http://guitarix.sourceforge.net/plugins/gx_colwah_" +-#define GXPLUGIN_UI_URI "http://guitarix.sourceforge.net/plugins/gx_colwah_gui" +- +- +-typedef enum +-{ +- EFFECTS_OUTPUT, +- EFFECTS_INPUT, +- WAH, +- FREQ, +- MODE, +- MODEL, +- WET_DRY, +-} PortIndex; +- +-#endif //SRC_HEADERS_GXEFFECTS_H_ +diff --git a/trunk/src/LV2/gx_wah.lv2/gx_colwah.ttl b/trunk/src/LV2/gx_wah.lv2/gx_colwah.ttl +deleted file mode 100644 +index 5ba01ff6..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/gx_colwah.ttl ++++ /dev/null +@@ -1,141 +0,0 @@ +-# +-# Copyright (C) 2014 Guitarix project MOD project +-# +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2 of the License, or +-# (at your option) any later version. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +-# -------------------------------------------------------------------------- +-# +- +- +-@prefix doap: <http://usefulinc.com/ns/doap#> . +-@prefix foaf: <http://xmlns.com/foaf/0.1/> . +-@prefix lv2: <http://lv2plug.in/ns/lv2core#> . +-@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +-@prefix guiext: <http://lv2plug.in/ns/extensions/ui#>. +-@prefix time: <http://lv2plug.in/ns/ext/time#>. +-@prefix units: <http://lv2plug.in/ns/extensions/units#> . +- +-<http://guitarix.sourceforge.net#me> +- a foaf:Person ; +- foaf:name "Guitarix team" ; +- foaf:mbox <mailto:guitarix-develo...@lists.sourceforge.net> ; +- rdfs:seeAlso <http://guitarix.sourceforge.net> . +- +-<http://guitarix.sourceforge.net/plugins/gx_colwah_> +- a doap:Project ; +- doap:maintainer <http://guitarix.sourceforge.net#me> ; +- doap:name "Gx_colwah_" . +- +-<http://guitarix.sourceforge.net/plugins/gx_colwah_#_colwah_> +- a lv2:Plugin , +- lv2:ModulatorPlugin ; +- doap:maintainer <http://guitarix.sourceforge.net#me> ; +- doap:name "GxWahwah"; +- doap:license <http://opensource.org/licenses/isc> ; +- lv2:project <http://guitarix.sourceforge.net/plugins/gx_colwah_> ; +- lv2:optionalFeature lv2:hardRTCapable ; +- +- lv2:minorVersion 34; +- lv2:microVersion 0; +- +- guiext:ui <http://guitarix.sourceforge.net/plugins/gx_colwah_gui#_colwah_>; +- +-rdfs:comment """ +- +-... +- +-"""; +- +- lv2:port [ +- a lv2:AudioPort , +- lv2:OutputPort ; +- lv2:index 0 ; +- lv2:symbol "out" ; +- lv2:name "Out" +- ] , [ +- a lv2:AudioPort , +- lv2:InputPort ; +- lv2:index 1 ; +- lv2:symbol "in" ; +- lv2:name "In" ; +- ] +- , [ +- a lv2:InputPort , +- lv2:ControlPort ; +- lv2:index 2 ; +- lv2:symbol "WAH" ; +- lv2:name "WAH" ; +- lv2:default 0.0 ; +- lv2:minimum 0.0 ; +- lv2:maximum 1.0 ; +- ] , [ +- a lv2:InputPort , +- lv2:ControlPort ; +- lv2:index 3 ; +- lv2:symbol "FREQ" ; +- lv2:name "FREQ" ; +- lv2:default 24.0 ; +- lv2:minimum 24.0 ; +- lv2:maximum 3.6e+02 ; +- ] , [ +- a lv2:InputPort , +- lv2:ControlPort ; +- lv2:index 4 ; +- lv2:symbol "MODE" ; +- lv2:name "MODE" ; +- lv2:default 0.0 ; +- lv2:minimum 0.0 ; +- lv2:maximum 2.0 ; +- lv2:portProperty lv2:integer; +- lv2:portProperty lv2:enumeration ; +- lv2:scalePoint [rdfs:label "manual"; rdf:value 0]; +- lv2:scalePoint [rdfs:label "auto"; rdf:value 1]; +- lv2:scalePoint [rdfs:label "alien"; rdf:value 2]; +- +- ] , [ +- a lv2:InputPort , +- lv2:ControlPort ; +- lv2:index 5 ; +- lv2:symbol "MODEL" ; +- lv2:name "MODEL" ; +- lv2:default 0.0 ; +- lv2:minimum 0.0 ; +- lv2:maximum 6.0 ; +- lv2:portProperty lv2:integer; +- lv2:portProperty lv2:enumeration ; +- lv2:scalePoint [rdfs:label "Colorsound Wah"; rdf:value 0]; +- lv2:scalePoint [rdfs:label "Dallas Wah"; rdf:value 1]; +- lv2:scalePoint [rdfs:label "Foxx Wah"; rdf:value 2]; +- lv2:scalePoint [rdfs:label "Jen Wah"; rdf:value 3]; +- lv2:scalePoint [rdfs:label "Maestro Wah"; rdf:value 4]; +- lv2:scalePoint [rdfs:label "SelmerWah"; rdf:value 5]; +- lv2:scalePoint [rdfs:label "Vox Wah V847"; rdf:value 6]; +- +- ] , [ +- a lv2:InputPort , +- lv2:ControlPort ; +- lv2:index 6 ; +- lv2:symbol "WET_DRY" ; +- lv2:name "WET_DRY" ; +- lv2:default 1e+02 ; +- lv2:minimum 0.0 ; +- lv2:maximum 1e+02 ; +- ] . +- +-<http://guitarix.sourceforge.net/plugins/gx_colwah_gui#_colwah_> +- a guiext:GtkUI; +- guiext:binary <gx_colwah_gui.so>; +- guiext:requiredFeature guiext:makeResident; +- . +diff --git a/trunk/src/LV2/gx_wah.lv2/gx_colwah_gui.cpp b/trunk/src/LV2/gx_wah.lv2/gx_colwah_gui.cpp +deleted file mode 100644 +index 449a8d33..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/gx_colwah_gui.cpp ++++ /dev/null +@@ -1,314 +0,0 @@ +-/* +- * Copyright (C) 2012 Hermann Meyer, Andreas Degert, Pete Shorthose, Steve Poskitt +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- * -------------------------------------------------------------------------- +- */ +- +- +-#include <string> +-#include <iostream> +- +-#include <gtkmm.h> +-#include "gx_colwah.h" +-#include "widget.h" +- +- +-#include <lv2.h> +-#include <lv2/lv2plug.in/ns/extensions/ui/ui.h> +- +-using namespace std; +- +-class Gx_colwah_GUI +-{ +-private: +- Glib::ustring plugskin; +- Glib::ustring addKnob; +- Glib::ustring plug_name; +- void set_knob(Glib::ustring knob); +- void set_skin(); +- void set_plug_name(const char * plugin_uri); +- GtkWidget* make_gui(); +-public: +- +- Widget* widget; +- static void set_plug_name_static(Gx_colwah_GUI *self, const char * plugin_uri) +- { +- self->set_plug_name(plugin_uri); +- } +- static GtkWidget* make_gui_static(Gx_colwah_GUI *self) +- { +- return self->make_gui(); +- } +- +- Gx_colwah_GUI () {}; +- ~Gx_colwah_GUI () {}; +-} ; +- +-void Gx_colwah_GUI::set_knob( Glib::ustring knob) +-{ +- addKnob = " style 'gx_"; +- addKnob += plug_name; +- addKnob += "_dark_skin_icons'\n" +- " { \n" +- " stock['bigknob'] = {{'"; +- addKnob += knob; +- addKnob += ".png'}}\n" +- " stock['smallknob'] = {{'"; +- addKnob += knob; +- addKnob += "-small.png'}}\n" +- " stock['smallknobr'] = {{'"; +- addKnob += knob; +- addKnob += "-middle.png'}}\n" +- " stock['button_on'] = {{'" +- "echo-switch_on.png'}}\n" +- " stock['button_off'] = {{'" +- "echo-switch_off.png'}}\n" +- " }\n" +- "widget '*."; +- addKnob += plug_name; +- addKnob += "' style 'gx_"; +- addKnob += plug_name; +- addKnob += "_dark_skin_icons' \n" +- "class '*GxToggleImage' style'gx_"; +- addKnob += plug_name; +- addKnob += "_dark_skin_icons' \n"; +-} +- +-void Gx_colwah_GUI::set_skin() +-{ +- Glib::ustring toparse = "pixmap_path "; +- toparse += " '"; +- toparse += GX_LV2_STYLE_DIR; +- toparse += "/'\n"; +- toparse += "style \"gx_"; +- toparse += plug_name; +- toparse += "_dark-paintbox\"\n" +- " { \n" +- " GxPaintBox::icon-set =9\n" +- " stock['gxhead'] = {{'"; +- toparse += plugskin; +- toparse += "'}}\n" +- " }\n" +- "\n" +- "style 'gx_head_black_box' \n" +- " { \n" +- " font_name = 'sans bold 7.5'\n" +- " fg[NORMAL] = '#ff9000' \n" +- " }\n"; +- toparse += addKnob; +- +- toparse += " widget '*.amplabel' style:highest 'gx_head_black_box'\n" +- "widget '*."; +- toparse += plug_name; +- toparse += "' style 'gx_"; +- toparse += plug_name; +- toparse += "_dark-paintbox' "; +- +- toparse += "style 'guitarix_default' {\n" +- +- " GxPaintBox::bevel = 0.11\n" +- " GxPaintBox::inverse = 0\n" +- " GxPaintBox::alternate-box = { 0, 0, 30, 15 }\n" +- +- " fg[NORMAL] = '#ff9000'\n" +- " fg[ACTIVE] = { 1.0, 1.0, 1.0 }\n" +- " fg[PRELIGHT] = { 1.0, 1.0, 1.0 }\n" +- " fg[INSENSITIVE] = { 0.5, 0.5, 0.5 }\n" +- " fg[SELECTED] = { 0.9, 0.9, 0.9 }\n" +- +- " bg[NORMAL] = { 0.13, 0.13, 0.13 }\n" +- " bg[ACTIVE] = { 0.0, 0.0, 0.0 }\n" +- " bg[PRELIGHT] = { 0.25, 0.25, 0.25 }\n" +- " bg[INSENSITIVE] = { 0.2, 0.2, 0.2 }\n" +- " bg[SELECTED] = { 0.25, 0.25, 0.25 }\n" +- +- " text[NORMAL] = { 0.9, 0.9, 0.9 }\n" +- " text[ACTIVE] = '#ff9000'\n" +- " text[PRELIGHT] = { 1.0, 1.0, 1.0 }\n" +- " text[INSENSITIVE] = { 0.5, 0.5, 0.5 }\n" +- " text[SELECTED] = { 1.0, 1.0, 1.0 }\n" +- +- " base[NORMAL] = { 0.0, 0.0, 0.0 }\n" +- " base[ACTIVE] = { 0.18, 0.18, 0.18 }\n" +- " base[PRELIGHT] = { 0.1, 0.1, 0.1 }\n" +- " base[INSENSITIVE] = { 0.2, 0.2, 0.2 }\n" +- " base[SELECTED] = { 0.8, 0.18, 0.18 }\n" +- "}\n" +- "widget '*."; +- toparse += plug_name; +- toparse += "' style:highest 'guitarix_default'\n"; +- toparse += " style 'gx_selector'\n" +- " {\n" +- " fg[NORMAL] = '#ff9000' \n" +- " fg[PRELIGHT] = '#ffffff' \n" +- " bg[NORMAL] = '#2f2f2f' \n" +- " bg[PRELIGHT] = '#2f2f2f' \n" +- " base[NORMAL] = { 0.05, 0.05, 0.05 } \n" +- " base[PRELIGHT] = '#000000' \n" +- " text[NORMAL] = '#ff9000' \n" +- " text[PRELIGHT] = '#ffffff' \n" +- " GxRegler::value-border = { 4, 4, 2, 2 } \n" +- " GxRegler::border-radius = 6\n" +- " GxRegler::bevel = 0.12\n" +- " GtkRange::trough-border = 2\n" +- " GtkRange::stepper-size = 8\n" +- " GtkRange::stepper-spacing = 2\n" +- " GxRegler::value-border = { 2, 0, 0, 0 }\n" +- " font_name = 'sans bold 7.5'\n" +- " xthickness = 8\n" +- " ythickness = 4\n" +- " }\n" +- "class '*GxSelector' style:highest 'gx_selector'\n"; +- toparse += " style 'guitarix_knobs' {\n" +- " fg[INSENSITIVE] = '#211006'\n" +- "}\n" +- "class 'GxKnob' style:highest 'guitarix_knobs'\n" +- +- "style 'guitarix_small_knob' {\n" +- " GxKnob::x_center = -1\n" +- " GxKnob::y_center = -1\n" +- " GxKnob::ring_radius = 15\n" +- " GxKnob::ring_width = 2\n" +- " GxKnob::ring_led_size = 3\n" +- " GxKnob::ring_led_distance = 2\n" +- " GxKnob::indicator_radius = 11\n" +- " GxKnob::indicator_width = 2\n" +- " GxKnob::indicator_length = 5\n" +- "}\n" +- "widget_class '*GxSmallKnob' style:highest 'guitarix_small_knob'\n" +- +- "style 'guitarix_small_knob_r' {\n" +- " GxKnob::x_center = -1\n" +- " GxKnob::y_center = -1\n" +- " GxKnob::ring_radius = 26\n" +- " GxKnob::ring_width = 3\n" +- " GxKnob::ring_led_size = 3\n" +- " GxKnob::ring_led_distance = 2\n" +- " GxKnob::indicator_radius = 12\n" +- " GxKnob::indicator_width = 3\n" +- " GxKnob::indicator_length = 3\n" +- "}\n" +- "widget_class '*GxSmallKnobR' style:highest 'guitarix_small_knob_r'\n" +- +- "style 'guitarix_mid_knob' {\n" +- " GxKnob::x_center = -1\n" +- " GxKnob::y_center = -1\n" +- " GxKnob::ring_radius = 35\n" +- " GxKnob::ring_width = 6\n" +- " GxKnob::ring_led_size = 2\n" +- " GxKnob::ring_led_distance = 2\n" +- " GxKnob::indicator_radius = 27\n" +- " GxKnob::indicator_width = 2\n" +- " GxKnob::indicator_length = 6\n" +- "}\n" +- "widget_class '*GxMidKnob' style:highest 'guitarix_mid_knob'\n" +- +- "style 'guitarix_big_knob' {\n" +- " GxKnob::x_center = -1\n" +- " GxKnob::y_center = -1\n" +- " GxKnob::ring_radius = 50.5\n" +- " GxKnob::ring_width = 3\n" +- " GxKnob::ring_led_size = 0\n" +- " GxKnob::ring_led_distance = 0\n" +- " GxKnob::indicator_radius = 46\n" +- " GxKnob::indicator_width = 3\n" +- " GxKnob::indicator_length = 6\n" +- "}\n" +- "widget_class '*GxBigKnob' style:highest 'guitarix_big_knob'\n" +- " \n"; +- +- gtk_rc_parse_string (toparse.c_str()); +-} +- +-void Gx_colwah_GUI::set_plug_name( const char * plugin_uri) +-{ +- addKnob = ""; +- +- if (strcmp("http://guitarix.sourceforge.net/plugins/gx_colwah_gui#_colwah_", plugin_uri) == 0) +- { +- plug_name = "Wahwah"; +- //set_knob("nk-knob"); +- } +- else +- { +- plug_name = "Wahwah"; +- } +-} +- +-GtkWidget* Gx_colwah_GUI::make_gui() +-{ +- // init the gxwmm library +- Gxw::init(); +- set_skin(); +- GtkWidget* container = gtk_vbox_new(FALSE, 2); +- widget = new Widget(plug_name); +- GtkWidget* cWidget = GTK_WIDGET(widget->gobj()); +- gtk_container_add(GTK_CONTAINER(container), cWidget ); +- +- return container; +-} +- +- +-static LV2UI_Handle instantiate(const struct _LV2UI_Descriptor * descriptor, +- const char * plugin_uri, +- const char * bundle_path, +- LV2UI_Write_Function write_function, +- LV2UI_Controller controller, +- LV2UI_Widget * widget, +- const LV2_Feature * const * features) +-{ +- Gx_colwah_GUI* self = new Gx_colwah_GUI(); +- if (self == NULL) return NULL; +- self->set_plug_name_static(self, plugin_uri); +- *widget = (LV2UI_Widget)self->make_gui_static(self); +- self->widget->controller = controller; +- self->widget->write_function = write_function; +- return (LV2UI_Handle)self; +-} +- +-static void cleanup(LV2UI_Handle ui) +-{ +- Gx_colwah_GUI *pluginGui = static_cast<Gx_colwah_GUI*>(ui); +- delete pluginGui->widget; +- delete pluginGui; +-} +- +-static void port_event(LV2UI_Handle ui, +- uint32_t port_index, +- uint32_t buffer_size, +- uint32_t format, +- const void * buffer) +-{ +- Gx_colwah_GUI *self = static_cast<Gx_colwah_GUI*>(ui); +- self->widget->set_value_static( port_index, buffer_size, format, buffer, self->widget); +- return; +-} +- +-static LV2UI_Descriptor descriptors[] = +-{ +- {GXPLUGIN_UI_URI"#_colwah_", instantiate, cleanup, port_event, NULL} +-}; +- +-const LV2UI_Descriptor * lv2ui_descriptor(uint32_t index) +-{ +- //printf("lv2ui_descriptor(%u) called\n", (uint32_t)index); +- if (index >= sizeof(descriptors) / sizeof(descriptors[0])) +- { +- return NULL; +- } +- return descriptors + index; +-} +- +diff --git a/trunk/src/LV2/gx_wah.lv2/manifest.ttl.in b/trunk/src/LV2/gx_wah.lv2/manifest.ttl.in +deleted file mode 100644 +index d67c6974..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/manifest.ttl.in ++++ /dev/null +@@ -1,26 +0,0 @@ +-# +-# Copyright (C) 2012 Hermann Meyer, Andreas Degert, Pete Shorthose, Steve Poskitt +-# +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2 of the License, or +-# (at your option) any later version. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +-# -------------------------------------------------------------------------- +-# +- +-@prefix lv2: <http://lv2plug.in/ns/lv2core#> . +-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +- +-<http://guitarix.sourceforge.net/plugins/gx_colwah_#_colwah_> +- a lv2:Plugin ; +- lv2:binary <gx_colwah@LIB_EXT@> ; +- rdfs:seeAlso <gx_colwah.ttl> , <modgui.ttl>. +diff --git a/trunk/src/LV2/gx_wah.lv2/modgui.ttl b/trunk/src/LV2/gx_wah.lv2/modgui.ttl +deleted file mode 100644 +index 4e30c382..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/modgui.ttl ++++ /dev/null +@@ -1,2 +0,0 @@ +-@prefix modgui: <http://moddevices.com/ns/modgui#> . +-@prefix lv2: <http://lv2plug.in/ns/lv2core#> . +diff --git a/trunk/src/LV2/gx_wah.lv2/wah.h b/trunk/src/LV2/gx_wah.lv2/wah.h +deleted file mode 100644 +index 01bd2fcb..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/wah.h ++++ /dev/null +@@ -1,26 +0,0 @@ +-/* +- * Copyright (C) 2014 Guitarix project MOD project +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- * -------------------------------------------------------------------------- +- */ +- +-#include "colwah.cc" +-#include "dallaswah.cc" +-#include "foxwah.cc" +-#include "jenwah.cc" +-#include "maestrowah.cc" +-#include "selwah.cc" +-#include "voxwah.cc" +diff --git a/trunk/src/LV2/gx_wah.lv2/widget.cpp b/trunk/src/LV2/gx_wah.lv2/widget.cpp +deleted file mode 100644 +index 8575d25f..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/widget.cpp ++++ /dev/null +@@ -1,268 +0,0 @@ +-/* +- * Copyright (C) 2012 Hermann Meyer, Andreas Degert, Pete Shorthose, Steve Poskitt +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- * -------------------------------------------------------------------------- +- */ +- +- +-#include "widget.h" +- +-#include <iostream> +- +- +-/* @get controller by port +- * this function is used by make_selector() make_controller_box() +- * set_value() and on_value_changed() +- * so controller widgets needs only here asined to a port, +- * and all functions which need acess to the controller widget pointer +- * can receive them by port number +- */ +- +-Gtk::Widget* Widget::get_controller_by_port(uint32_t port_index) +-{ +- switch ((PortIndex)port_index ) +- { +- case WAH: +- return &m_bigknob[0]; +- case FREQ: +- return &m_bigknob[1]; +- case MODE: +- return &m_selector[0]; +- case MODEL: +- return &m_selector[1]; +- case WET_DRY: +- return &m_bigknob[2]; +- +- default: +- return NULL; +- } +-} +- +-Widget::Widget(Glib::ustring plugname): +-plug_name(plugname), +-logo(plugname) +-{ +- Glib::ustring enumMODEL[] = {"Colorsound Wah","Dallas Wah","Foxx Wah","Jen Wah","Maestro Wah","Selmer Wah","Vox Wah V847"}; +- static const size_t enumMODEL_size = sizeof(enumMODEL) / sizeof(enumMODEL[0]); +- make_selector_box(&m_vboxs[0],"MODEL", enumMODEL, enumMODEL_size, 0,1.0, MODEL); +- +- Glib::ustring enumMODE[] = {"manual","auto","alien"}; +- static const size_t enumMODE_size = sizeof(enumMODE) / sizeof(enumMODE[0]); +- make_selector_box(&m_vboxs[1],"MODE", enumMODE, enumMODE_size, 0,1.0, MODE); +- +- // create controllers for port name +- make_controller_box(&m_vboxc[0], "WAH", 0.0, 1.0, 0.01, WAH); +- make_controller_box(&m_vboxc[1], "ALIEN FREQ", 24.0, 3.6e+02, 1.0, FREQ); +- make_controller_box(&m_vboxc[2], "WET_DRY", 0.0, 1e+02, 1.0, WET_DRY); +- +- // set propertys for the main paintbox holding the skin +- m_paintbox.set_border_width(10); +- m_paintbox.set_spacing(6); +- m_paintbox.set_homogeneous(false); +- m_paintbox.set_name(plug_name); +- m_paintbox.property_paint_func() = "rack_unit_expose"; +- add(m_paintbox); +- // box for the controllers +- m_hbox_.set_spacing(25); +- m_hbox_.set_border_width(24); +- m_hbox_.set_homogeneous(false); +- // set a vertical box in the paintbox +- m_vbox.set_border_width(14); +- m_vbox1.set_border_width(14); +- m_paintbox.pack_start(m_vbox_); +- +- // modify logo layout +- Pango::FontDescription font_desc = logo.get_style()->get_font(); +- font_desc.set_size(int(14*Pango::SCALE)); +- font_desc.set_weight(Pango::WEIGHT_BOLD); +- logo.modify_font(font_desc); +- +- // and controller box on top +- //m_hbox1_.set_border_width(24); +- m_hbox1_.set_spacing(64); +- logo.set_name("amplabel"); +- m_vbox_.pack_start(m_hbox1_, Gtk::PACK_SHRINK); +- m_hbox1_.pack_start(m_vbox1_, Gtk::PACK_EXPAND_PADDING); +- m_hbox1_.pack_end(m_vbox2_, Gtk::PACK_SHRINK); +- m_hbox1_.pack_end(logo, Gtk::PACK_SHRINK); +- m_vbox_.pack_start(m_hbox_, Gtk::PACK_SHRINK); +- m_vbox_.set_homogeneous(false); +- // put boxed controllers into controller box +- m_hbox_.pack_start(m_vbox1, Gtk::PACK_EXPAND_PADDING); +- for (int i = 0; i<2;i++) { +- m_vboxs_.pack_start(m_vboxs[i]); +- } +- m_vboxs_.set_spacing(5); +- m_hbox_.pack_start(m_vboxs_, Gtk::PACK_EXPAND_PADDING); +- for (int i = 0; i<3;i++) { +- m_hbox_.pack_start(m_vboxc[i]); +- } +- m_hbox_.pack_start(m_vbox, Gtk::PACK_EXPAND_PADDING); +- +- // connect expose handler as resize handler +- m_paintbox.signal_expose_event().connect( +- sigc::mem_fun(this, &Widget::_expose_event), true); +- +- set_app_paintable(true); +- show_all(); +-} +- +-Widget::~Widget() +-{ +- +-} +- +-// set borderwith for paintbox when widget resize +-// to hold controllers in place +-bool Widget::_expose_event(GdkEventExpose *event) +-{ +- int x, y, width, height, depth; +- m_paintbox.get_window()->get_geometry(x, y, width, height, depth); +- //double_t height = m_paintbox.get_window()->get_height(); +- m_paintbox.set_border_width(height/10); +- return false; +-} +- +-// create selectors from gxwmm +-void Widget::make_selector_box(Gtk::Box *box, +- Glib::ustring labela, +- Glib::ustring tables[], +- size_t _size, +- float min, float digits, +- PortIndex port_name) +-{ +- Gxw::Selector *regler = static_cast<Gxw::Selector*> +- (get_controller_by_port(port_name)); +- if (regler) +- { +- float max = static_cast<float>(_size+1); +- +- Gtk::TreeModelColumn<Glib::ustring> label; +- Gtk::TreeModelColumnRecord rec; +- rec.add(label); +- Glib::RefPtr<Gtk::ListStore> ls = Gtk::ListStore::create(rec); +- +- for (uint32_t i = 0 ; i< _size; ++i) { +- ls->append()->set_value(0, tables[i]); +- } +- regler->set_model(ls); +- regler->set_has_tooltip(); +- regler->set_tooltip_text(labela); +- regler->cp_configure("SELECTOR", labela, min, max, digits); +- regler->set_show_value(false); +- regler->set_name(plug_name); +- regler->signal_value_changed().connect(sigc::bind(sigc::mem_fun( +- *this, &Widget::on_value_changed), port_name)); +- box->pack_start(*regler,Gtk::PACK_SHRINK); +- } +-} +- +-// create stackboxes with controllers for port name +-void Widget::make_controller_box(Gtk::Box *box, +- Glib::ustring label, +- float min, float max, +- float digits, +- PortIndex port_name) +-{ +- Gxw::Regler *regler = static_cast<Gxw::Regler*>( +- get_controller_by_port(port_name)); +- if (regler) +- { +- Gtk::Label* pr = new Gtk::Label(label, 0); +- pr->set_name("amplabel"); +- // use label images instead simple string labes +- //Glib::ustring label_image = GX_LV2_STYLE_DIR; +- //label_image += "/"; +- //label_image += label; +- //label_image += ".png"; +- //Gtk::Image *pr = new Gtk::Image(label_image); +- +- Gtk::VBox* b1 = new Gtk::VBox(); +- box->pack_start( *Gtk::manage(b1), Gtk::PACK_EXPAND_PADDING); +- box->pack_start( *Gtk::manage(pr),Gtk::PACK_SHRINK); +- regler->cp_configure("KNOB", label, min, max, digits); +- regler->set_show_value(true); +- regler->set_name(plug_name); +- box->pack_start(*regler,Gtk::PACK_SHRINK); +- Gtk::VBox* b2 = new Gtk::VBox(); +- box->pack_start( *Gtk::manage(b2), Gtk::PACK_EXPAND_PADDING); +- regler->signal_value_changed().connect(sigc::bind(sigc::mem_fun( +- *this, &Widget::on_value_changed), port_name)); +- } +-} +- +-// create stackboxes with switch controller for port name +-void Widget::make_switch_box(Gtk::Box *box, +- Glib::ustring label, +- PortIndex port_name) +-{ +- Gxw::Switch *regler = static_cast<Gxw::Switch*>( +- get_controller_by_port(port_name)); +- if (regler) +- { +- Gtk::Label* pr = new Gtk::Label(label, 0); +- pr->set_name("amplabel"); +- // use label images instead simple string labes +- /*Glib::ustring label_image = GX_LV2_STYLE_DIR; +- label_image += "/"+plug_name+"-"; +- label_image += label; +- label_image += "-label.png"; +- Gtk::Image *pr = new Gtk::Image(label_image);*/ +- +- regler->cp_configure("switch", label, 0, 1, 1); +- regler->set_name(plug_name); +- regler->set_base_name( "button" ); +- Gtk::VBox* b1 = new Gtk::VBox(); +- box->pack_start( *Gtk::manage(b1), Gtk::PACK_EXPAND_PADDING); +- box->pack_start( *Gtk::manage(pr),Gtk::PACK_SHRINK); +- box->pack_start(*regler,Gtk::PACK_SHRINK); +- Gtk::VBox* b2 = new Gtk::VBox(); +- box->pack_start( *Gtk::manage(b2), Gtk::PACK_EXPAND_PADDING); +- regler->signal_toggled().connect(sigc::bind(sigc::mem_fun( +- *this, &Widget::on_value_changed), port_name)); +- } +-} +- +-// receive controller value changes from host and set them to controller +-void Widget::set_value(uint32_t port_index, +- uint32_t format, +- const void * buffer) +-{ +- if ( format == 0 ) +- { +- Gxw::Regler *regler = static_cast<Gxw::Regler*>( +- get_controller_by_port(port_index)); +- if (regler) +- { +- float value = *static_cast<const float*>(buffer); +- regler->cp_set_value(value); +- } +- } +-} +- +-// write (UI) controller value changes to the host->engine +-void Widget::on_value_changed(uint32_t port_index) +-{ +- Gxw::Regler *regler = static_cast<Gxw::Regler*>( +- get_controller_by_port(port_index)); +- if (regler) +- { +- float value = regler->cp_get_value(); +- write_function(controller, port_index, sizeof(float), 0, +- static_cast<const void*>(&value)); +- } +-} +- +diff --git a/trunk/src/LV2/gx_wah.lv2/widget.h b/trunk/src/LV2/gx_wah.lv2/widget.h +deleted file mode 100644 +index 7ec76d20..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/widget.h ++++ /dev/null +@@ -1,96 +0,0 @@ +-/* +- * Copyright (C) 2012 Hermann Meyer, Andreas Degert, Pete Shorthose, Steve Poskitt +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- * -------------------------------------------------------------------------- +- */ +- +-#pragma once +- +-#ifndef SRC_HEADERS_WIDGET_H_ +-#define SRC_HEADERS_WIDGET_H_ +- +-#include <gtkmm.h> +-#include <gxwmm.h> +-#include "gx_colwah.h" +-#include "../config.h" // for GX_STYLE_DIR +-// LV2UI stuff +-#include "lv2/lv2plug.in/ns/extensions/ui/ui.h" +- +-class Widget : public Gtk::HBox +-{ +-private: +- Gtk::Widget* get_controller_by_port(uint32_t port_index); +- +- void on_value_changed(uint32_t port_index); +- +- void make_controller_box(Gtk::Box *box, +- Glib::ustring label, +- float min, float max, +- float digits, +- PortIndex port_name); +- +- void make_selector_box(Gtk::Box *box, +- Glib::ustring label, +- Glib::ustring tables[], +- size_t _size, +- float min, float digits, +- PortIndex port_name); +- +- void make_switch_box(Gtk::Box *box, +- Glib::ustring label, +- PortIndex port_name); +- +- bool _expose_event(GdkEventExpose *event); +- +- void set_value(uint32_t port_index, +- uint32_t format, +- const void * buffer); +-public: +- +- // public Lv2 communication stuff +- LV2UI_Controller controller; +- LV2UI_Write_Function write_function; +- static void set_value_static(uint32_t port_index, +- uint32_t buffer_size, +- uint32_t format, +- const void * buffer, Widget *self) +- { +- self->set_value(port_index,format,buffer); +- } +- +- Widget(Glib::ustring plugname); +- ~Widget(); +- +-protected: +- Glib::ustring plug_name; +- Gtk::Label logo; +- Gtk::VBox m_vbox_; +- Gtk::VBox m_vbox1_; +- Gtk::VBox m_vbox2_; +- Gtk::VBox m_vbox; +- Gtk::VBox m_vbox1; +- Gtk::VBox m_vboxc[3]; +- Gtk::VBox m_vboxs[2]; +- Gtk::VBox m_vboxs_; +- Gtk::HBox m_hbox_; +- Gtk::HBox m_hbox1_; +- +- Gxw::PaintBox m_paintbox; +- Gxw::Selector m_selector[2]; +- Gxw::SmallKnobR m_bigknob[3]; +-}; +- +-#endif //SRC_HEADERS_WIDGET_H_ +diff --git a/trunk/src/LV2/gx_wah.lv2/wscript b/trunk/src/LV2/gx_wah.lv2/wscript +deleted file mode 100644 +index fa66b426..00000000 +--- a/trunk/src/LV2/gx_wah.lv2/wscript ++++ /dev/null +@@ -1,62 +0,0 @@ +-#!/usr/bin/env python +-# encoding: utf-8 +- +-import sys +- +-def configure(conf): +- pass +- +-def build(bld): +- bundle = 'gx_colwah.lv2' +- +- src = ['gx_colwah.cpp' +- ] +- incl = ['../faust','./', '../DSP'] +- lib = [] +- if sys.platform.startswith("linux"): +- lib.append('dl') +- uselib = ['LV2CORE'] +- cxxflag =[] +- if not bld.env['OPT'] and bld.env['SSE2']: +- cxxflag = [ "-msse2", "-mfpmath=sse"] +- lv2_effects = bld.shlib( +- includes = incl, +- lib = lib, +- uselib = uselib, +- obj_ext = '_14.o', +- cxxflags = cxxflag, +- defines = ["LV2_SO"], +- target = 'gx_colwah', +- source = src, +- install_path = '${LV2DIR}/%s' % bundle, +- chmod = 0o755, +- ) +- lv2_effects.env['cxxshlib_PATTERN'] = '%s.so' +- +- if bld.env['LV2GUI']: +- libpath1 = [] +- lib1 = [] +- incl = [] +- if sys.platform.startswith("linux"): +- lib1.append('dl') +- +- lv2_plugin_gui = bld.shlib( +- includes = incl, +- lib = lib1, +- libpath = libpath1, +- use = ['gxwmm','LV2CORE','GTKMM'], +- linkflags = '-Wl,-z,nodelete', +- defines = ["LV2_GUI"], +- target = 'gx_colwah_gui', +- source = 'widget.cpp gx_colwah_gui.cpp', +- install_path = '${LV2DIR}/%s' % bundle, +- chmod = 0o755, +- ) +- lv2_plugin_gui.env['cxxshlib_PATTERN'] = '%s.so' +- +- install_path = '${LV2DIR}/%s' % bundle, +- if bld.env['MODGUI']: +- bld.install_files('${LV2DIR}/gx_colwah.lv2', bld.path.ant_glob('*.ttl'), relative_trick=True) +- bld.install_files('${LV2DIR}/gx_colwah.lv2', bld.path.ant_glob('modgui/**/*'), relative_trick=True) +- else: +- bld.install_files('${LV2DIR}/gx_colwah.lv2', bld.path.ant_glob('*.ttl', excl=['modgui.ttl']), relative_trick=True) +-- +2.25.1 + + +From 2addb8b8028486992b1ca93f4a6c000d39cb0911 Mon Sep 17 00:00:00 2001 +From: brummer10 <brumm...@web.de> +Date: Mon, 20 Jan 2020 07:38:47 +0100 +Subject: [PATCH 5/8] introduce new midi toggle behavior Toggle, fix bug #79 + +--- + trunk/src/gx_head/engine/gx_paramtable.cpp | 8 ++++++++ + trunk/src/headers/gx_main_midi.h | 3 ++- + trunk/src/headers/gx_parameter.h | 2 +- + 3 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/trunk/src/gx_head/engine/gx_paramtable.cpp b/trunk/src/gx_head/engine/gx_paramtable.cpp +index caa65a34..0b8f87a2 100644 +--- a/trunk/src/gx_head/engine/gx_paramtable.cpp ++++ b/trunk/src/gx_head/engine/gx_paramtable.cpp +@@ -326,6 +326,14 @@ bool MidiController::set_midi(int n, int last_value, bool update) { + } + break; + } ++ case Parameter::toggle_type::Toggle: { ++ if (param->on_off_value() && !n) { ++ ret = param->midi_set(0, 127, _lower, _upper); ++ } else { ++ ret = param->midi_set(127, 127, _lower, _upper); ++ } ++ break; ++ } + } + } else { + //fprintf(stderr,"continues %s \n",param->id().c_str()); +diff --git a/trunk/src/headers/gx_main_midi.h b/trunk/src/headers/gx_main_midi.h +index 9c0ebc4d..c68502e5 100644 +--- a/trunk/src/headers/gx_main_midi.h ++++ b/trunk/src/headers/gx_main_midi.h +@@ -77,7 +77,8 @@ class MidiConnect { + enum { RESPONSE_DELETE = 1 }; + std::map<gx_engine::Parameter::toggle_type, const char*> toggle_behaviour_descriptions { + { gx_engine::Parameter::toggle_type::OnOff, "off /on states transition toggle" }, +- { gx_engine::Parameter::toggle_type::Constant, "constant state toggle" } ++ { gx_engine::Parameter::toggle_type::Constant, "constant state toggle" }, ++ { gx_engine::Parameter::toggle_type::Toggle, "toggle state" } + }; + GtkTreeSelection* selection; + GtkListStore* store; +diff --git a/trunk/src/headers/gx_parameter.h b/trunk/src/headers/gx_parameter.h +index fa0fb680..c4c9cca5 100644 +--- a/trunk/src/headers/gx_parameter.h ++++ b/trunk/src/headers/gx_parameter.h +@@ -106,7 +106,7 @@ class FileParameter; + class Parameter: boost::noncopyable { + public: + enum ctrl_type { None, Continuous, Switch, Enum }; +- enum toggle_type { OnOff = 0, Constant = 1, _Count = 2 }; ++ enum toggle_type { OnOff = 0, Constant = 1, Toggle = 2, _Count = 3 }; + private: + virtual bool midi_set(float n, float high, float llimit, float ulimit); //RT + virtual bool midi_set_bpm(float n, float high, float llimit, float ulimit); //RT +-- +2.25.1 + + +From 504e88037300f6252aa9620d9f3e1d08be7d9b68 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Hubert=20Figui=C3=A8re?= <h...@figuiere.net> +Date: Sun, 26 Jan 2020 11:03:44 -0500 +Subject: [PATCH 7/8] Gxw::FastMeter: add missing properties + +--- + trunk/libgxwmm/gxwmm/fastmeter.hg | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/trunk/libgxwmm/gxwmm/fastmeter.hg b/trunk/libgxwmm/gxwmm/fastmeter.hg +index 2d525758..60c1cd25 100644 +--- a/trunk/libgxwmm/gxwmm/fastmeter.hg ++++ b/trunk/libgxwmm/gxwmm/fastmeter.hg +@@ -33,6 +33,8 @@ class FastMeter: public Gtk::DrawingArea { + _WRAP_METHOD(void set_hold_count(int val), gx_fast_meter_set_hold_count) + _WRAP_PROPERTY(hold, int) + _WRAP_PROPERTY(dimen, int) ++ _WRAP_PROPERTY(horiz, bool) ++ _WRAP_PROPERTY(type, int) + _WRAP_PROPERTY("var-id", Glib::ustring) + }; + +-- +2.25.1 + + +From 872954ce5c41890f2a1975726803e9e6e75d3387 Mon Sep 17 00:00:00 2001 +From: Andreas Degert <a...@papyrus-gmbh.de> +Date: Wed, 29 Jan 2020 22:01:58 +0100 +Subject: [PATCH 8/8] dsp2cc, dsp2insert: make it work with Faust 2.20.2 + + - 2 variables in Faust output are renamed, the tools now detect the + correct variable name (so it still works with Faust 2.15.11) + + - added an option --no-version-header to suppress the Faust version + number in der generated output (so two different Faust versions + have a chance to produce identical output) + +In an attempt to find (and fix) the cause of a long-standing Faust bug +which leads to random order of output terms, I found commit +18c4b269 Introduction of serial numbers in trees (2019-04-02) +which might have fixed the bug. It's included in Faust 2.20.2, so +maybe we have reproducible output if we switch to that version. +--- + trunk/tools/dsp2cc | 123 +++++++++++++++++++++-------------------- + trunk/tools/dsp2insert | 56 +++++++++---------- + 2 files changed, 91 insertions(+), 88 deletions(-) + +diff --git a/trunk/tools/dsp2cc b/trunk/tools/dsp2cc +index 4951ba59..9bc272c7 100755 +--- a/trunk/tools/dsp2cc ++++ b/trunk/tools/dsp2cc +@@ -193,63 +193,59 @@ class Parser(object): + return line + return "" + ++ @staticmethod ++ def remove_indentation(cp): ++ m = re.compile(r"\t*").match ++ n = 10 ++ for l in cp: ++ if l != "\n": ++ n = min(n, len(m(l).group(0))) ++ return [l[n:] for l in cp] ++ + def copy(self, exp, line=None): + cp = [] + if line: + cp.append(line) + m = re.compile(exp).match +- p = re.compile(r"\tint fSamplingFreq;").match ++ p = re.compile(r"\tint (fSamplingFreq|fSampleRate);").match + o = re.compile(r" public:").match + for line in self.lines: + if not line.strip(): + continue +- if p(line): ++ t = p(line) ++ if t: ++ self.sample_rate_var = t.group(1) + continue + if m(line): + break + if o(line): + break + cp.append(line) +- # remove indentation +- m = re.compile(r"\t*").match +- n = 10 +- for l in cp: +- if l != "\n": +- n = min(n, len(m(l).group(0))) +- return [l[n:] for l in cp] ++ return self.remove_indentation(cp) + + def read_init(self, exp, line=None): + cp = [] + if line: + cp.append(line) + m = re.compile(exp).match +- n = re.compile(" }").match +- p = re.compile(r"\tint fSamplingFreq;").match + o = re.compile(r" public:").match + for line in self.lines: + if not line.strip(): + continue +- if p(line): +- continue +- if n(line): +- continue + if m(line): + break + if o(line): + break + if line.startswith(" for"): + line = line.replace("{\n","") +- line = line.replace("\t","") + l = next(self.lines) + line += l.replace("\t","") ++ l = next(self.lines) ++ if not l.strip(): ++ l = next(self.lines) ++ assert l.strip() == '}', repr(l) + cp.append(line) +- # remove indentation +- m = re.compile(r"\t*").match +- n = 10 +- for l in cp: +- if l != "\n": +- n = min(n, len(m(l).group(0))) +- return [l[n:] for l in cp] ++ return self.remove_indentation(cp) + + def get_section_list(self): + return "includes", "incl_class", "var-decl", "alias-defines", "alias-undefines", "var-init", "var-free", "ui", "compute", "post_compute" +@@ -579,7 +575,12 @@ class Parser(object): + s = {} + self.ui = UIDefs() + #self.readMeta() # (needed only for faust 9.4 +- self.headvers = self.skip_until(r"\s*\s*(Code generated with Faust.*)").group(1) ++ headvers = self.skip_until(r"\s*\s*((Code generated with Faust *)([^ ]*)(.*))") ++ self.faust_version = headvers.group(3) ++ if self.options.version_header: ++ self.headvers = headvers.group(1) ++ else: ++ self.headvers = headvers.group(2) + headvers.group(4).lstrip() + cl,self.l,s["includes"] = self.readIncludes(r"#ifndef FAUSTCLASS") + if cl: + s["incl_class"] = self.readClass(r"#ifndef FAUSTCLASS") +@@ -600,8 +601,8 @@ class Parser(object): + self.skip_until(r"\s*virtual void instanceResetUserInterface") + s["var-init"] += self.copy(r"\s*}$") + self.skip_until(r"\s*virtual void instanceClear") +- s["var-init"] += self.read_init(r"\s*virtual void init") +- del s["var-init"] [-1] ++ s["var-init"] += self.read_init(r'\t}') ++ self.sample_rate_param = self.skip_until(r"\s*virtual void init\(int ([a-zA-Z_]+)\)").group(1) + self.skip_until(r"\s*virtual void buildUserInterface") + s["ui"] = self.readUI(r"\s*}$") + s["var-decl"], s["alias-defines"], s["alias-undefines"] = self.change_var_decl(var_decl,options.init_type) +@@ -854,7 +855,7 @@ namespace %(namespace)s { + #if %(has_activate)s + static bool mem_allocated = false; + #endif +-static int fSamplingFreq; ++static int %(sample_rate_var)s; + + #if %(has_state)s + static void clear_state_f(PluginDef* = 0) +@@ -863,7 +864,7 @@ static void clear_state_f(PluginDef* = 0) + } + + #endif +-static void init(unsigned int samplingFreq, PluginDef* = 0) ++static void init(unsigned int %(sample_rate_param)s, PluginDef* = 0) + { + %(init_body)s\ + #if %(has_state_no_activate)s +@@ -1054,16 +1055,16 @@ private: + #if %(has_stereo)s + gx_resample::FixedRateResampler smps; + #endif +- int samplingFreq; ++ int %(sample_rate_param)s; + #endif + #if %(has_oversample)s + gx_resample::FixedRateResampler smp; + #if %(has_stereo)s + gx_resample::FixedRateResampler smps; + #endif +- int samplingFreq; ++ int %(sample_rate_param)s; + #endif +- int fSamplingFreq; ++ int %(sample_rate_var)s; + %(var_decl)s\ + + #if %(has_insert_p)s +@@ -1097,7 +1098,7 @@ public: + static const char *glade_def; + #endif + #endif +- void init(unsigned int samplingFreq); ++ void init(unsigned int %(sample_rate_param)s); + void compute(int %(countname)s%(compute_args)s); + int register_par(const ParamReg& reg); + #if %(has_plugindef)s +@@ -1111,7 +1112,7 @@ public: + #if %(has_ui)s + static int load_ui_f_static(const UiBuilder& b, int form); + #endif +- static void init_static(unsigned int samplingFreq, PluginDef*); ++ static void init_static(unsigned int %(sample_rate_param)s, PluginDef*); + static void compute_static(int %(countname)s%(compute_args)s, PluginDef*); + static int register_params_static(const ParamReg& reg); + static void del_instance(PluginDef *p); +@@ -1189,23 +1190,23 @@ void Dsp::clear_state_f_static(PluginDef *p) + #if %(has_fixedrate)s + inline void Dsp::init(unsigned int RsamplingFreq) + { +- samplingFreq = %(fixedrate)s; +- smp.setup(RsamplingFreq, samplingFreq); ++ %(sample_rate_param)s = %(fixedrate)s; ++ smp.setup(RsamplingFreq, %(sample_rate_param)s); + #if %(has_stereo)s +- smps.setup(RsamplingFreq, samplingFreq); ++ smps.setup(RsamplingFreq, %(sample_rate_param)s); + #endif + #endif + #if %(has_oversample)s + inline void Dsp::init(unsigned int RsamplingFreq) + { +- samplingFreq = %(oversample)s * RsamplingFreq; +- smp.setup(RsamplingFreq, samplingFreq); ++ %(sample_rate_param)s = %(oversample)s * RsamplingFreq; ++ smp.setup(RsamplingFreq, %(sample_rate_param)s); + #if %(has_stereo)s +- smps.setup(RsamplingFreq, samplingFreq); ++ smps.setup(RsamplingFreq, %(sample_rate_param)s); + #endif + #endif + #if %(no_oversample)s +-inline void Dsp::init(unsigned int samplingFreq) ++inline void Dsp::init(unsigned int %(sample_rate_param)s) + { + #endif + %(init_body)s\ +@@ -1218,9 +1219,9 @@ inline void Dsp::init(unsigned int samplingFreq) + } + + #if %(has_plugindef)s +-void Dsp::init_static(unsigned int samplingFreq, PluginDef *p) ++void Dsp::init_static(unsigned int %(sample_rate_param)s, PluginDef *p) + { +- static_cast<Dsp*>(p)->init(samplingFreq); ++ static_cast<Dsp*>(p)->init(%(sample_rate_param)s); + } + + #endif +@@ -1470,16 +1471,16 @@ private: + #if %(has_stereo)s + gx_resample::FixedRateResampler smps; + #endif +- uint32_t samplingFreq; ++ uint32_t %(sample_rate_param)s; + #endif + #if %(has_oversample)s + gx_resample::FixedRateResampler smp; + #if %(has_stereo)s + gx_resample::FixedRateResampler smps; + #endif +- uint32_t samplingFreq; ++ uint32_t %(sample_rate_param)s; + #endif +- uint32_t fSamplingFreq; ++ uint32_t %(sample_rate_var)s; + %(var_decl)s\ + + #if %(has_insert_p)s +@@ -1512,7 +1513,7 @@ public: + #if %(has_activate)s + int activate(bool start); + #endif +- void init(uint32_t samplingFreq); ++ void init(uint32_t %(sample_rate_param)s); + void compute(int %(countname)s%(compute_args)s); + #if %(has_plugindef)s + +@@ -1522,7 +1523,7 @@ public: + #if %(has_activate)s + static int activate_static(bool start, PluginLV2*); + #endif +- static void init_static(uint32_t samplingFreq, PluginLV2*); ++ static void init_static(uint32_t %(sample_rate_param)s, PluginLV2*); + static void compute_static(int %(countname)s%(compute_args)s, PluginLV2*); + static void del_instance(PluginLV2 *p); + #if %(has_lv2)s +@@ -1596,23 +1597,23 @@ void Dsp::clear_state_f_static(PluginLV2 *p) + #if %(has_fixedrate)s + inline void Dsp::init(uint32_t RsamplingFreq) + { +- samplingFreq = %(fixedrate)s; +- smp.setup(RsamplingFreq, samplingFreq); ++ %(sample_rate_param)s = %(fixedrate)s; ++ smp.setup(RsamplingFreq, %(sample_rate_param)s); + #if %(has_stereo)s +- smps.setup(RsamplingFreq, samplingFreq); ++ smps.setup(RsamplingFreq, %(sample_rate_param)s); + #endif + #endif + #if %(has_oversample)s + inline void Dsp::init(uint32_t RsamplingFreq) + { +- samplingFreq = %(oversample)s * RsamplingFreq; +- smp.setup(RsamplingFreq, samplingFreq); ++ %(sample_rate_param)s = %(oversample)s * RsamplingFreq; ++ smp.setup(RsamplingFreq, %(sample_rate_param)s); + #if %(has_stereo)s +- smps.setup(RsamplingFreq, samplingFreq); ++ smps.setup(RsamplingFreq, %(sample_rate_param)s); + #endif + #endif + #if %(no_oversample)s +-inline void Dsp::init(uint32_t samplingFreq) ++inline void Dsp::init(uint32_t %(sample_rate_param)s) + { + #endif + %(init_body)s\ +@@ -1625,9 +1626,9 @@ inline void Dsp::init(uint32_t samplingFreq) + } + + #if %(has_plugindef)s +-void Dsp::init_static(uint32_t samplingFreq, PluginLV2 *p) ++void Dsp::init_static(uint32_t %(sample_rate_param)s, PluginLV2 *p) + { +- static_cast<Dsp*>(p)->init(samplingFreq); ++ static_cast<Dsp*>(p)->init(%(sample_rate_param)s); + } + + #endif +@@ -2177,6 +2178,8 @@ class Output(object): + has_separate_header = fp_head is not None, + header_name = h_name, + sharedlib = self.options.template_type == "sharedlib", ++ sample_rate_param = self.parser.sample_rate_param, ++ sample_rate_var = self.parser.sample_rate_var, + )) + s.seek(0) + preprocess(s, fp, fp_head) +@@ -2193,18 +2196,18 @@ class Output(object): + self.parser.write(fp, "var-decl", dct=dict(static="static ")) + if self.has_activate: + fp.write("static bool mem_allocated = false;\n") +- fp.write("static int\tfSamplingFreq;\n\n") ++ fp.write("static int\t%s;\n\n" % self.parser.sample_rate_var) + if self.state_init: + fp.write("static void clear_state_f(PluginDef* = 0)\n{\n") + fp.write(self.state_init); + fp.write("}\n\n") + if self.state_init and not self.has_activate: +- fp.write("static void init(unsigned int samplingFreq, PluginDef* = 0)\n{\n") ++ fp.write("static void init(unsigned int %s, PluginDef* = 0)\n{\n" % self.parser.sample_rate_param) + self.parser.write(fp, "var-init", 1, filt=self.parser.ui.var_filter(1)) + fp.write('\tclear_state_f();\n') + fp.write("}\n\n") + else: +- fp.write("static void init(unsigned int samplingFreq, PluginDef* = 0)\n{\n") ++ fp.write("static void init(unsigned int %s, PluginDef* = 0)\n{\n" % self.parser.sample_rate_param) + self.parser.write(fp, "var-init", 1, filt=self.parser.ui.var_filter(1)) + fp.write("}\n\n") + if self.has_activate: +@@ -2276,6 +2279,8 @@ def main(): + help="put definitions inside an extra namespace") + op.add_option("-e", "--param-warn", dest="param_warn", action="store_true", default=False, + help="don't signal an error when the ui definition references an unknown dsp parameter") ++ op.add_option("--no-version-header", dest="version_header", action="store_false", default=True, ++ help="don't display the faust version in generated files") + options, args = op.parse_args() + if options.init_type not in init_opts: + op.error("unknown init-type") +diff --git a/trunk/tools/dsp2insert b/trunk/tools/dsp2insert +index b54c03bb..0a298fe2 100755 +--- a/trunk/tools/dsp2insert ++++ b/trunk/tools/dsp2insert +@@ -187,63 +187,59 @@ class Parser(object): + return line + return "" + ++ @staticmethod ++ def remove_indentation(cp): ++ m = re.compile(r"\t*").match ++ n = 10 ++ for l in cp: ++ if l != "\n": ++ n = min(n, len(m(l).group(0))) ++ return [l[n:] for l in cp] ++ + def copy(self, exp, line=None): + cp = [] + if line: + cp.append(line) + m = re.compile(exp).match +- p = re.compile(r"\tint fSamplingFreq;").match ++ p = re.compile(r"\tint (fSamplingFreq|fSampleRate);").match + o = re.compile(r" public:").match + for line in self.lines: + if not line.strip(): + continue +- if p(line): ++ t = p(line) ++ if t: ++ self.sample_rate_var = t.group(1) + continue + if m(line): + break + if o(line): + break + cp.append(line) +- # remove indentation +- m = re.compile(r"\t*").match +- n = 10 +- for l in cp: +- if l != "\n": +- n = min(n, len(m(l).group(0))) +- return [l[n:] for l in cp] ++ return self.remove_indentation(cp) + + def read_init(self, exp, line=None): + cp = [] + if line: + cp.append(line) + m = re.compile(exp).match +- n = re.compile(" }").match +- p = re.compile(r"\tint fSamplingFreq;").match + o = re.compile(r" public:").match + for line in self.lines: + if not line.strip(): + continue +- if p(line): +- continue +- if n(line): +- continue + if m(line): + break + if o(line): + break + if line.startswith(" for"): + line = line.replace("{\n","") +- line = line.replace("\t","") + l = next(self.lines) + line += l.replace("\t","") ++ l = next(self.lines) ++ if not l.strip(): ++ l = next(self.lines) ++ assert l.strip() == '}', repr(l) + cp.append(line) +- # remove indentation +- m = re.compile(r"\t*").match +- n = 10 +- for l in cp: +- if l != "\n": +- n = min(n, len(m(l).group(0))) +- return [l[n:] for l in cp] ++ return self.remove_indentation(cp) + + def get_section_list(self): + return "includes", "var-decl", "alias-defines", "alias-undefines", "var-init", "var-free", "ui", "compute" +@@ -551,8 +547,8 @@ class Parser(object): + self.skip_until(r"\s*virtual void instanceResetUserInterface") + s["var-init"] += self.copy(r"\s*}$") + self.skip_until(r"\s*virtual void instanceClear") +- s["var-init"] += self.read_init(r"\s*virtual void init") +- del s["var-init"] [-1] ++ s["var-init"] += self.read_init(r'\t}') ++ self.sample_rate_param = self.skip_until(r"\s*virtual void init\(int ([a-zA-Z_]+)\)").group(1) + self.skip_until(r"\s*virtual void buildUserInterface") + s["ui"] = self.readUI(r"\s*}$") + s["var-decl"], s["alias-defines"], s["alias-undefines"] = self.change_var_decl(var_decl,options.init_type) +@@ -686,7 +682,7 @@ insert_p1_incl = \"\"\" + + insert_p1_class = \"\"\" + #if %(has_oversample)s +- int samplingFreq; ++ int %(sample_rate_param)s; + gx_resample::FixedRateResampler smpCl; + #if %(has_stereo)s + gx_resample::FixedRateResampler smpsCl; +@@ -697,10 +693,10 @@ insert_p1_class = \"\"\" + + insert_p1_init = \"\"\" + #if %(has_oversample)s +- samplingFreq = %(oversample)s; +- smpCl.setup(fSamplingFreq, samplingFreq); ++ %(sample_rate_param)s = %(oversample)s; ++ smpCl.setup(%(sample_rate_var)s, %(sample_rate_param)s); + #if %(has_stereo)s +- smpsCl.setup(fSamplingFreq, samplingFreq); ++ smpsCl.setup(%(sample_rate_var)s, %(sample_rate_param)s); + #endif + #endif + %(init_body)s\ +@@ -864,6 +860,8 @@ class Output(object): + compute_body = self.parser_sect("compute", 1), + undefines = self.parser_sect("alias-undefines", 0), + register_body = self.parser_ui("reg."), ++ sample_rate_param = self.parser.sample_rate_param, ++ sample_rate_var = self.parser.sample_rate_var, + )) + s.seek(0) + preprocess(s, fp, fp_head) +-- +2.25.1 +